jdbc mysql 参数中利用存储过程插入数据怎么参数传不进来

Java调用存储过程的传递Date参数的问题 - 中华考试网()
&&当前位置: >
> 文章内容
Java调用存储过程的传递Date参数的问题 &&【
】&&[ 日 ]
建了一个存储过程  复制内容到剪贴板  代码:  create procedure PR_YDFT_GETFT_TIME   @AJLB tinyint, ―― 案件类别  @AJBHLIST varchar(1500), ―― 案件编号列表  @KSSJ datetime, ―― 开始时间  @JSSJ datetime ―― 结束时间  as   begin…………  select BH, AH from K_ZS……B_ZX where……(这里返回一个结果集)  end  在java代码中如下调用(时间类型为java.sql.Date),即使数据库有数据,也不能正确返回结果集:复制内容到剪贴板  代码:  public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {   //………………  cs.setDate(3, new java.sql.Date(kssj.getTime()));  cs.setDate(4, new java.sql.Date(jssj.getTime()));  //………………  }  但是将方法改为如下(时间类型为String),就可以正常返回结果集:  复制内容到剪贴板代码:  public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {   //………………  cs.setString(3, kssj);  cs.setString(4, jssj);  //………………  }:首页 1
“全国专业技术人员计算机应用能力考试考前冲刺”丛书是为比较熟悉科目内容,但不熟..
定价:¥25.00
优惠价:¥18.80&&本书以国家人力资源和社会保障部人事考试中心颁布的最新版《全国专业技术人员计算机..
定价:¥25.00
优惠价:¥18.80&&
????????????
????????????
         Copyright ©
() All Rights Reserved在前而我们已经学习了如何使用使用JDBC存储过程,。本教程是类似,但它会将有关JDBC的SQL转义语法的附加信息。
正如一个Connection对象创建Statement和PreparedStatement对象,它也创造了CallableStatement对象这将被用来执行调用数据库存储过程。
创建CallableStatement对象:
假设,需要执行以下Oracle存储过程:
CREATE OR REPLACE PROCEDURE getEmpName
(EMP_ID IN NUMBER, EMP_FIRST OUT VARCHAR) AS
SELECT first INTO EMP_FIRST
FROM Employees
WHERE ID = EMP_ID;
注意:&上面已经写过Oracle存储过程,但我们正在使用MySQL数据库,写相同的存储过程对于MySQL如下,以EMP数据库中创建它:
DELIMITER $$
DROP PROCEDURE IF EXISTS `EMP`.`getEmpName` $$
CREATE PROCEDURE `EMP`.`getEmpName`
(IN EMP_ID INT, OUT EMP_FIRST VARCHAR(255))
SELECT first INTO EMP_FIRST
FROM Employees
WHERE ID = EMP_ID;
DELIMITER ;
三种类型的参数有:IN,OUT和INOUT。PreparedStatement对象只使用IN参数。 CallableStatement对象可以使用所有的三个。
这里是每个定义:
它的值是在创建SQL语句时未知的参数。将值绑定到setXXX()方法的参数。
其值是由它返回的SQL语句提供的参数。你从OUT参数的getXXX()方法检索值。
同时提供输入和输出值的参数。绑定setXXX()方法的变量,并与getXXX()方法检索值。
下面的代码片段显示了如何使用该Connection.prepareCall()方法实例化基于上述存储过程CallableStatement对象:
CallableStatement cstmt = null;
String SQL = &{call getEmpName (?, ?)}&;
cstmt = conn.prepareCall (SQL);
catch (SQLException e) {
String变量的SQL表示存储过程,使用参数占位符。
使用CallableStatement对象是使用PreparedStatement对象。必须将值绑定到所有的参数执行该语句之前,否则将收到一个SQLException。
如果有IN参数,只要按照适用于PreparedStatement对象相同的规则和技巧;使用对应于要绑定Java数据类型的setXXX()方法。
当使用OUT和INOUT参数就必须采用额外CallableStatement方法的registerOutParameter()。registerOutParameter()方法JDBC数据类型绑定到数据类型的存储过程返回。
一旦调用存储过程,用getXXX()方法的输出参数检索值。这种方法投射SQL类型的值检索到Java数据类型。
关闭CallableStatement 对象:
正如关闭其他Statement对象,出于同样的原因,也应该关闭CallableStatement对象。
close()方法简单的调用将完成这项工作。如果关闭了Connection对象首先它会关闭CallableStatement对象为好。然而,应该始终明确关闭的CallableStatement对象,以确保正确的清除。
CallableStatement cstmt = null;
String SQL = &{call getEmpName (?, ?)}&;
cstmt = conn.prepareCall (SQL);
catch (SQLException e) {
cstmt.close();
为了更好地理解,建议研究学习.
JDBC的SQL转义语法:
转义语法使能够使用通过使用标准的JDBC方法和属性,无法使用数据库的某些特性的灵活性。
一般的SQL转义语法格式如下:
{keyword 'parameters'}
这里有以下这些,会发现非常有用的,而这样做的JDBC编程的转义序列:
d, t, ts 关键字:
他们帮助确定日期,时间和时间戳记文字。如所知,没有两个数据库管理系统是基于时间和日期的方式相同。此转义语法告诉驱动程序呈现在目标数据库的格式,日期或时间。实现例子:
{d 'yyyy-mm-dd'}
其中yyyy=年,mm =月,DD =日。使用这种语法&{d ''}是日。
下面是一个简单的例子说明如何插入日期表:
//Create a Statement object
stmt = conn.createStatement();
//Insert data ==& ID, First Name, Last Name, DOB
String sql=&INSERT INTO STUDENTS VALUES& +
&(100,'Zara','Ali', {d ''})&;
stmt.executeUpdate(sql);
同样,可以使用以下两种语法之一,无论是 t&或&ts:&
{t 'hh:mm:ss'}
其中hh=小时,mm=分,ss=秒。使用此语法 {t '13:30:29'}是下午1点三十分29秒.
{ts 'yyyy-mm-dd hh:mm:ss'}
这是上述两种语法&'d' 和 &'t' 来表示时间戳结合语法。
escape 关键字:
该关键字标识LIKE子句中使用的转义字符。有用使用SQL通配符%,其中匹配零个或多个字符时。例如:
String sql = &SELECT symbol FROM MathSymbols
WHERE symbol LIKE '\%' {escape ''}&;
stmt.execute(sql);
如果使用反斜杠字符()作为转义字符,还必须使用两个反斜杠字符在Java字符串字面,因为反斜杠也是一个Java转义字符。
fn 关键字:
此关键字代表在DBMS中使用标量函数。例如,可以使用SQL&length函数计算GE字符串的长度:
{fn length('Hello World')}
这将返回11,字符串&'Hello World'的长度。.
call 关键字:
此关键字是用来调用存储过程。例如,对于一个存储过程,需要一个IN参数,请使用以下语法:
{call my_procedure(?)};
对于一个存储过程,需要一个IN参数并返回一个OUT参数,使用下面的语法:
{? = call my_procedure(?)};
oj 关键字:
此关键字用来表示外部联接。其语法如下:
{oj outer-join}
外连接表={LEFT| RIGHT| FULL}外连接{表|外连接}的搜索条件。例如:
String sql = &SELECT Employees
FROM {oj ThisTable RIGHT
OUTER JOIN ThatTable on id = '100'}&;
stmt.execute(sql);
本站代码下载:用JDBC给存储过程传递数组类型的参数 zz_Java_ThinkSAAS
用JDBC给存储过程传递数组类型的参数 zz
用JDBC给存储过程传递数组类型的参数 zz
内容来源: 网络
PHP开发框架
开发工具/编程工具
服务器环境
ThinkSAAS商业授权:
ThinkSAAS为用户提供有偿个性定制开发服务
ThinkSAAS将为商业授权用户提供二次开发指导和技术支持
让ThinkSAAS更好,把建议拿来。
开发客服微信

我要回帖

更多关于 jdbc调用存储过程 的文章

 

随机推荐