- 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);