当前位置: 代码迷 >> J2SE >> 请教这里面的proc=con.prepareCall("{call updateage(?)}");是什么意思呀?为什么还要在双引号里面呢
  详细解决方案

请教这里面的proc=con.prepareCall("{call updateage(?)}");是什么意思呀?为什么还要在双引号里面呢

热度:346   发布时间:2016-04-24 02:17:09.0
请问这里面的proc=con.prepareCall("{call updateage(?,?,?)}");是什么意思呀?为什么还要在双引号里面呢?
Java code
import java.util.*;import java.sql.*;public class CallProcedure {    public static void main(String args[]) {          String url = "jdbc:odbc:stu";        Connection con;        String sql;        Statement stmt;        int num;       String name,sex;       int age;               try {          Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");       } catch(java.lang.ClassNotFoundException e) {           System.err.print("ClassNotFoundException: ");           System.err.println(e.getMessage());       }        try {                    con = DriverManager.getConnection(url, "system", "system");            stmt = con.createStatement();                        //向student表中插入一行录记录                        Scanner in=new Scanner(System.in);            System.out.println("\n输入学生的自然信息");            System.out.println("-----------------------------");            System.out.print("学号:");            num=in.nextInt();                           System.out.print("年龄:");             age=in.nextInt();                          CallableStatement proc;            proc=con.prepareCall("{call updateage(?,?,?)}");            proc.setInt(1,num);                       proc.setInt(2,age);                                     proc.registerOutParameter(3, Types.VARCHAR);      proc.execute();      String varNumber= proc.getString(3);      System.out.println("返回参数是: "+varNumber);      if (varNumber.compareTo("0")==0)         System.out.println("对学号"+num+"更新成功!");      if (varNumber.compareTo("1")==0)         System.out.println("年龄偏大,非神童也,嘿嘿~,更新无效呀!");      if (varNumber.compareTo("2")==0)          System.out.println("学号"+num+"不存在,更新失败!");            con.commit();         //关闭连接。            stmt.close();            con.close();         } catch(SQLException ex) {            System.err.println("SQLException: " + ex.getMessage());        }              }}



请问这里面的proc=con.prepareCall("{call updateage(?,?,?)}");是什么意思呀?为什么还要在双引号里面呢?
call updateage是什么语法啊?
proc.registerOutParameter(3, Types.VARCHAR);里面按顺序位置 parameterIndex 将 OUT 参数注册为 JDBC 类型 sqlType。不懂是什么意思啊,那个Types.VARCHAR又是什么呀?

------解决方案--------------------
使用语句调用过程,先预编译语句,后给参数,最后那个是JDBC定义的数据类型,对应数据库的相应类型~
------解决方案--------------------
形式是语法要求的,?是存储过程的参数占位符
Types.VARCHAR是数据库的字符串类型,相当于Java的String
------解决方案--------------------
查阅java调用oracle存储过程例子,你就应该明白了
------解决方案--------------------
proc=con.prepareCall("{call updateage(?,?,?)}");
proc.setInt(1,num);
proc.setInt(2,age);
proc.registerOutParameter(3, Types.VARCHAR);
第一句话调用数据库的存储过程。第二和第三句。把两个变量num和age分别替换第一句的第一个和第二个问号。第四句将第三个问号。设置成存储过程的返回参数类型。
proc=con.prepareCall("{call updateage(num,age,Types.VARCHAR)}");

------解决方案--------------------
调用数据库存储过程。

执行结果是返回值表示。

探讨

可是我还是有点小疑问,它设置返回参数类型干什么呀?

------解决方案--------------------
Java code
proc.registerOutParameter(3, Types.VARCHAR);
  相关解决方案