Java中执行存储过程

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

String driver="com.microsoft.sqlserver.jdbc.SQLServerDriver";

privatestaticfinal String

url="jdbc:sqlserver://127.0.0.1:1433;DataBaseName=demo";

privatestaticfinal String sa="sa";

privatestaticfinal String pwd="123";

//建立连接

publicstatic Connection getCon(){

Connection co=null;

try {

Class.forName(driver);

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

} catch (Exception e) {

e.printStackTrace();

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

}

return co;

}

//关闭所有对象

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

if(rs!=null){

ps.close();

rs=null;

}

if(ps!=null){

ps.close();

ps=null;

}

if(co!=null){

co.close();

co=null;

}

} catch (Exception e) {

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

}

}

}

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

为后两者本身就已经直接或间接实现了STATEMENT接口,有疑问具体可以查阅一下API文档。

2.这里作为示例,准备了一个demo数据库(sql server),里面

有一张studentInfo表,添加5条测试数据,表结构如下:

createtable studentInfo

(

stuId intprimarykeyidentity(1,1),

stuName varchar(20)notnull,

stuAge int notnull default 0,

)

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

1.无参无返:

创建存储过程proc_getAllInfo如下:

--查询所有studentInfo记录

createproc proc_getAllInfo

as

begin

select*from studentInfo

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("{call

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

相关文档
最新文档