您的位置:首页 > 编程语言 > Java开发

Java程序端如何来调用存储过程

2013-11-22 12:12 232 查看
存储过程在服务器端被写好,生命存储过程的调用对象:CallableStatement
Call是一个单词
able是一个单词
Statement是一个单词
把这三个单词的意思联合起来就是:能被调用的SQL语句。
由于CallableStatement对象是派生自以前我们的PreparedStatement,所以在PreparedStatement中我们能够用的所有的功能在CallableStatement对象中全都能用。
在上一篇关于Java的文章中提到了Vector集合,它和ArrayList集合的不同时Vector集合是同步的,线程安全的,是怎么一种安全呢,我们去调用Vector对象,这是一条线程,从我们开始调用开始直到调用结束,这条线程都处于打开的状态,并且在这期间别的访问者想来访问Vector是不允许的,这就体现了它的线程安全性。直到使用完毕,我们访问它的这条线程关闭,释放资源,这个时候别人才可以去访问Vector对象。我们访问,别人得不到访问,这时候如果在web上,别的用户就处于一种等待的状态,如果用户一多,这个集合就显得不好用了。
在Vector集合中的所有功能在ArrayList集合中同样都能够使用。
以上关于集合对象是额外插上去的一点记录罢了。调用存储过程来操作数据,这个时候就把SQL语句在数据库中写好就行了,不用在我们的Java端再来写SQL语句,存储过程怎么写在上一篇文章中也说得很详细了,至于在Java中调用存储过程的这一个对象:CallableStatement 怎么来使用是我要来说的一个重点:public boolean insertdb(Jobs jobs){boolean flag = false;try{java.sql.Connection conn =new DBConnection().getConn();java.sql.CallableStatementcst =conn.prepareCall("{call jobs_insert (?,?,?)}");//在我们上面注释的那个存储过程就是我在数据库中新建立的那个存储过程,在这里怎么来使用,这句话就是调用存储过程的核心,首先得到Connection数据库连接对象,然后用我们上面提到的CallableStatement对象来用我们在数据库中写好的存储过程,就是conn.prepareCall();这里面不和PreparedStatement对象似地放一条SQL语句了,而是想办法把我们写好的存储过程拿过来,怎么拿过来呢?首先是弄一个一个字符串得加上双引号"",双引号里面的内容得被转译成SQL语句,这时候又得进行转义,这个时候转义就用到一对花括号{},用一对花括号来对我们写的这些字符串转译成我们对应的存储过程,花括号里面就是我们的核心语句了,首先是一个关键字Call,后面是我们的存储过程名,我们在命名存储过程的时候一般遵循这么个原则,以表的名字开头,比如说我这是对Jobs表写的一个存储过程,我的存储过程名字开头就以Jobs名开头,后面的字段描述的是我们这个存储过程究竟是来干什么的,例如我们这里是来进行添加数据的,我们的存储过程名就写成jobs_insert,就这么来命名存储过程。这里把存储过程名加上去以后,后面有一个空格,空格后面跟一对小括号,这个小括号是来干什么用的呢,是来放我们存储过程中的参数的,无论是存储过程中的输入参数还是输出参数都要在这里加以体现,就是用我们的问号 ? 来进行体现,中间用逗号隔开。这就是我们存储过程中的参数,无论是输入参数还是输出参数都必须进行体现,都必须用问号来体现出来。cst.setString(1, jobs.getDesc());cst.setInt(2, jobs.getMax());cst.setInt(3, jobs.getMin());int x = cst.executeUpdate();//执行费查询语句if(x > 0){flag = true;}else{flag = true;}conn.close();//最好不要在这里关闭数据库连接,最好在finally里面关闭数据库连接。}catch(Exception ex){ex.printStackTrace();}return flag;}---------------------------------------------------------------------//对于输出参数的处理,我们用这么一个方法:首先上面说了,无论是输入参数还是输出参数我们都必须用问号来指明一下,然后下面一步操作是告诉Java一下我们在数据库中的这个变量究竟是什么类型的,Java知道了以后就去执行,就去获得这个输出参数,得到输出参数使用CallableStatement对象的registerOutParameter对象来得到的,然后和我们以前执行查询语句和费查询语句略微有些区别,这里不再用executeUpdate()和executeQuery()来执行我们的SQL语句或存储过程了,对于有输出参数的存储过程我们是用execute()来进行执行。
以上的截图就是一个完整的Java来调用带有输出参数的存储过程的方法。大家可以参考。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: