数据库批处理与存储过程(jdbc+sql2005)
时间:2010-08-31 来源:summerdir
一、数据库设计代码
代码--建一个测试表
CREATE TABLE summer(
id int primary key ,
name varchar(20) not null ,
sex varchar(20) not null
)
--存储过程
CREATE PROCEDURE p_test
@id int,
@name varchar(20),
@sex varchar(20),
@out_message nvarchar(2) output
AS
BEGIN TRAN
SET @out_message=''
BEGIN TRY
insert into summer (id,name,sex) values(@id,@name,@sex)
IF @@rowcount=0
SET @out_message='0'
END TRY
BEGIN CATCH
SET @out_message='0'
END CATCH
IF @@ERROR<>0
ROLLBACK TRAN A
ELSE
IF @out_message=''
SET @out_message='1'
COMMIT TRAN A
GO
二、程序端代码
代码1 //声明
2 Collection c=new Vector();
3 Object[] str;
4 int count;
5 String sex=null;
6
7 //button(增加)的功能
8 if("".equals(text1.getText()) || text1.getText()==null){
9 JOptionPane.showMessageDialog(null,"输入不能为空!");
10 }else{
11 c.add(text1.getText());
12 text1.setText("");
13 str=c.toArray();
14 }
15
16 //button(提交)的功能
17 System.out.println(new Date()); //数据插入前系统的时间
18 String sql="{call p_test(?,?,?,?)}";
19 String sql1="select count(*) from summer";
20 try {
21 rs=stmt.executeQuery(sql1);
22 if(rs.next()){
23 count=rs.getInt(1);
24 }
25 PreparedStatement cs=conn.prepareStatement(sql);
26 if(c.size()==0){
27 JOptionPane.showMessageDialog(null,"没有数据录入!");
28 }else{
29 for(Object s:str){
30 cs.setInt(1,++count);
31 cs.setString(2,s.toString());
32 if(count%2==0){
33 sex="male";
34 }else{
35 sex="female";
36 }
37 cs.setString(3,sex);
38 cs.setString(4,"");
39 cs.addBatch();
40 }
41 cs.executeBatch();
42 conn.commit();
43 }
44 System.out.println(new Date()); //数据插入提交系统的时间
45 } catch (SQLException e) {
46 e.printStackTrace();
47 }
三、程序运行截图
四、程序执行后截图
五、个人收获和问题
收获:批处理+存储过程实现起来感觉还是比较方便,感觉sql语句不用写那么多吧,也可以防止当系统中途崩溃而造成数据库出现数据不一致等问题吧。
问题:其实我还不太懂存储过程的作用,我感觉他在效率方面也并不怎么高,也许是没有经过大量的数据测试,所以感觉不到吧。
相关阅读 更多 +