Java中执行存储过程

2019-08-31 22:11

Java执行存储过程常用方法

首先说一下存储过程的优点:

1. 存储过程是预编译的,第一次编译执行后,之后的执行效率会比较, 也就是

存储过程效率高

2. 存储过程, 只是提供给用户使用, 封装了内部操作, 可以防止注入攻击 3. 便于修改和维护, 只需要修改存储过程内部业务实现, 并不需要修改使

用的实现.

4. 减少使用流量, 存储过程内部SQL语句,是储存在数据库中, 所以省去了

加载SQL语句的流量

存储过程的形式大概可以分为以下几种:

1. 无参无返2.有参无返3.无参有返 4有参有返 5.传出参数

这里的返回值并不是指执行查询之后返回的结果视图,而是值在存储过程中return返回的值..下面将对Sql Server数据库使用存储过程举例:

准备工作:

1.使用JDBC链接方式, 需要引入jar包: sqljdbc4.jar,封装一个数据连

接类, 方便接下来的操作,这里类名为DBHelper, 定义了一个静态方法getCon(), 用于返回链接对象,返回值类型为Connection, 还有一个关闭对象的方法closeAll(Connection co,Statement ps,ResultSet rs); 其中参数分别为Connection,Statement,ResultSet的对象。

具体代码如下:

publicclass DBHelper { }

privatestaticfinal privatestaticfinal String

privatestaticfinal String sa=\; privatestaticfinal String pwd=\; //建立连接

publicstatic Connection getCon(){ }

//关闭所有对象

publicstaticvoid closeAll(Connection co,Statement ps,ResultSet rs){ }

try { }

if(rs!=null){ }

if(ps!=null){ }

if(co!=null){ }

System.out.println(e.getMessage());

co.close(); co=null; ps.close(); ps=null; ps.close(); rs=null;

Connection co=null; try { }

return co;

Class.forName(driver);

co=DriverManager.getConnection(url,sa,pwd); e.printStackTrace();

System.out.println(e.getMessage());

Stringdriver=\; url=\;

} catch (Exception e) {

} catch (Exception e) {

注意:这里的关闭方法参数中的STATEMENT PS,如果接下来操作会使用PREPAREDSTATEMENT和CALLABLESTATEMENT接口,不需要进行类型转化,因

为后两者本身就已经直接或间接实现了

STATEMENT接口,有疑问具体可以

查阅一下API文档。

2. 这里作为示例,准备了一个 demo数据库(sql server),里面有一张studentInfo表,添加5条测试数据,表结构如下:

createtablestudentInfo (

stuIdintprimarykeyidentity(1,1), )

stuNamevarchar(20)notnull, stuAgeintnotnulldefault 0,

OK , 所有的准备工作已经完成。 接下来讲示例几种存储过程的示例:

1. 无参无返:

创建存储过程proc_getAllInfo如下: --查询所有studentInfo记录 createprocproc_getAllInfo

as begin

select*fromstudentInfo end

在java中,执行普通的sql语句,使用的是Statement对象或者PreparedStatement,而在调用存储过程,应该使用CallableStatement接口。

CallableStatement接口:

用于执行 SQL 存储过程的接口。JDBC API 提供了一个存储过程 SQL 转义语法,

该语法允许对所有 RDBMS 使用标准方式调用存储过程。

执行上面的存储过程示例代码:

//测试类

publicclass Test {

publicstaticvoid main(String[] args) throws Exception{ Connection co=DBHelper.getCon();//获取链接对象 CallableStatement cs=co.prepareCall(\

proc_getAllInfo}\);//通过连接获取CallableStatement对象 ResultSet rs=cs.executeQuery();//执行并返回结果集 while(rs.next()){//循环读取逐行

System.out.print(rs.getString(2)+\); }

DBHelper.closeAll(co, cs, rs); } }

1. 通过已经封装之后的DBHelper类中的getCon()静态方法获取连接对象Co

2. 通过co对象的prepareCall(String arg0)方法可以换回一个指定存储过程的调用对象, 需要注意的是,参数 arg0在次应该写为“{call

存储过程名}”。即:CallableStatement cs=co.prepareCall(\proc_getAllInfo}\

3. 通过使用cs的executeQuery(); 返回执行的结果集, 为ResultSet类型,因为CallablesStatement接口实现了PrepareStatement接口,而PrepareStatement接口又实现了Statement接口,所以CallablesStatement对象拥有executeQuery()方法。 4. 然后使用将返回的结果集逐行读取。

5. 最后,不要忘记关闭所有的对象。还是调用DBHelper中的静态方法closeAll()。

接下来操做就不在解释上面这些语句,有特殊不同地方会有所标注,来看第二个示例:

2. 有参无返:

创建存储过程proc_getInfoByStuName,有一个字符串类型参数,如下:

--根据stuName查询记录

createprocproc_getInfoByStuName @stuNamevarchar(20) as begin select*fromstudentInfowherestuName=@stuName end

执行上面的存储过程示例代码:

//测试类

publicclass Test {

publicstaticvoid main(String[] args) throws Exception{ Connection co=DBHelper.getCon();//获取链接对象 CallableStatement cs=co.prepareCall(\

proc_getInfoByStuName (?)}\);//通过连接获取CallableStatement对象 String stuName=\;

cs.setString(1, stuName);


Java中执行存储过程.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:语文考试要点

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: