• 数据库批处理与存储过程(jdbc+sql2005)


      东西总是不完美的,最近想完善一下之前做的考试系统,想在录入试题的时候能一批批地录入,而不是一道道地录入,想节省时间吧,就想用jdbc中的批处理进行录入,从而提高效率吧。

    一、数据库设计代码

    代码
    --建一个测试表
    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语句不用写那么多吧,也可以防止当系统中途崩溃而造成数据库出现数据不一致等问题吧。

    六、一些问题

      问题:1、其实我还不太懂存储过程的作用,我感觉他在效率方面也并不怎么高,也许是没有经过大量的数据测试,所以感觉不到吧。

         2、其实我觉得这个也不太好,因为他也是先一道道的录入容器里的,然后提交的时候能保证数据不会出现因为系统问题造成一些数据不一致等问题吧。其实我在第一次做批处理的时候,曾经拿了三个textField进行测试,最后感觉控件多了很烦人,就想用一个textField代替,结果就用了一个button去代替了另人的两个textField,但感觉还是不太好吧。还是想能不能通过其它的途径去实现。

  • 作者: swyma
    出处: http://www.cnblogs.com/maoan/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    用__new__ 创建单例模式
    函数的列表作为默认参数
    循环闭包函数打印列表
    斐波那契函数和回调函数
    类的共享属性
    字典和format用法
    python 面试大全: 01_类变量在内部是作为字典处理的
    git 学习删除某次提交
    mysql调优
    re模块
  • 原文地址:https://www.cnblogs.com/maoan/p/1813128.html
  • Copyright © 2020-2023  润新知