当前位置: 首页 > 图文教程 > Java技术 > Java基础 > JDBC中参数的输入与输出

Java基础
浅谈Java语言接口与继承本质区别
java基础 -- JAVA字符集
JAVA基础知识精华总结
孙鑫老师原创:Servlet与Tomcat
java基础知识
Java程序开发中应用线程
JAVA基础之面向对象
关于Java IO流学习总结
如何用Java实现FTP服务器
Java抽象类和接口和继承之间关系
Java获取URL对应的资源
详解Java多线程开发中的数据同步
Java中跳出多层循环的简单方法
Java多线程程序设计初步入门
JavaScript(一)
JavaScript(二)
Java基础:JAVA SE基础部分(一)
Java基础:JAVA SE基础部分(二)
Java基础:Ruby将赶超Java吗?
java基础:小编浅谈java中的一些编程思想

Java基础 中的 JDBC中参数的输入与输出


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-12-26   浏览: 464 ::
收藏到网摘: n/a

要实现使用SQL语句的输入与输出参数,必须在PreparedStatement类的对象上进行操作;同时由于CallableStatement类是PrepareStatement类的子类,所以在CallableStatemen对象上的操作也可以使用输入与输出参数;其主要的编程原理是在生成CallableStatementPreparedStatement类的对象时,可以在SQL语句中指定输入或输出参数,在执行这个SQL语句之前,要对输入参数进行赋值。

1)使用PreparedStatement类的对象

   通过prepareStatement类的对象可以实现在查询语句与数据更新语句方面都可以设置输入参数。

    具体的方法是在SQL语句中用“?”标明参数,在执行SQL语句之前,使用setXXX方法给参数赋值,然后使用executeQuery()executeUpdate()来执行这个SQL语句。每次执行SQL语句之前,可以给参数重新赋值。

    setXXX方法用于给相应的输入参数进行赋值,其中XXXJDBC的数据类型,如:IntString等。setXXX方法有两个参数,第一个是要赋值的参数在SQL语句中的位置, SQL语句中的第一个参数的位置为1,第二个参数的位置为2setXXX方法的第二个参数是要传递的值,如100、“Peking”等,随XXX的不同而为不同的类型。

    PreparedStatement pstmt=con.prepareStatement("Update TableName set Name=? where ID=?");

    pstmt.setString(1,"zhang Hua");  //设置第一个参数(Name)为 zhang Hua

    for(int i=1;i<3;i++)

    {  pstmt.setInt(2,i); //设置第二个参数(ID)为 1,2

       pstmt.executeUpdate();

    }

要点:最终实现 Update TableName set Name=zhang Hua where ID=1 Update TableName set Name=zhang Hua where ID=2的效果。

2)使用CallableStatement对象

    如果要求调用数据库的存储过程,要使用CallableStatement对象。另外还有些存储过程要求用户输入参数,这可以在生成CallableStatement对象的存储过程调用语句中设置输入参数。在执行这个存储过程之前使用setXXX方法给参数赋值,然后再执行这个存储过程。

   CallableStatement cstmt=con.prepareCall("{call Query(?)}");  //Query为存储过程名

   cstmt.setString(1,"输入参数");  //为存储过程提供输入参数

   ResultSet rs=cstmt.executeQuery();

3)接收输出参数

   某些存储过程可能会返回输出参数,这时在执行这个存储过程之前,必须使用CallableStatementregisterOutParameter方法首先登记输出参数,在registerOutParameter方法中要给出输出参数的相应位置以及输出参数的SQL数据类型。在执行完存储过程以后,必须使用getXXX方法来获得输出参数的值。并在getXXX方法中要指出获得哪一个输出参数(通过序号来指定)的值。

实例:存储过程getTestData有三个输入参数并返回一个输出参数,类型分别为VARCHAR。在执行完毕后,分别使用getString()方法来获得相应的值。

CallableStatement cstmt = con.prepareCall(“{? = call getTestData (?,?,?)}”);

cstmt.setString(1,Value);                                   //设置输入参数

cstmt.setInt(2,Value);

cstmt.setFloat(3,Value);

cstmt.registerOutParameter(1,java.sql.Types.VARCHAR);   //登记输出参数

ResultSet rs = cstmt.executeQuery();          //执行存储过程

rs.getString(1);                                                //获得第一个字段的值

String returnResult=cstmt.getString(1);                        //获得返回的输出参数的值

要点:由于getXXX方法不对数据类型作任何转换,在registerOutParameter方法中指明数据库将返回的SQL数据类型,在执行完存储过程以后必须采用相应匹配的getXXX方法来获得输出参数的值。