public Connection getConnection() { try { System.out.println(getConnectionUrl());
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); conn = DriverManager.getConnection(getConnectionUrl(), userName,
password); if (conn != null) { System.out.println("数据库连接成功!");
} } catch (Exception ce) { ce.printStackTrace();
System.out.println("getConnection() 内部错误跟踪:" + ce.getMessage());
} return conn;
} /**
 * 获取数据库命令执行对象的方法
 * 
 * @param sql
 *            要执行的SQL命令拼装语句字符串
 * @return 数据库命令执行对象
 */
private PreparedStatement getPreparedStatement(String sql) {
try {
// 根据获取的数据库连接对象创建数据库命令执行对象
this.preStatement = getConnection().prepareStatement(sql);
} catch (Exception ex) {
System.err.println("获取数据库命令执行对象错误:" + ex.getMessage());
// 在控制台输出异常堆栈信息
// ex.printStackTrace();
}
// 返回数据库命令执行对象
return this.preStatement;
}
public int executeUpdate(String sql) {
try {
// 置空结果集对象的原有内容
this.rsSet = null;
// 执行语句并返回受影响行数
return this.getPreparedStatement(sql).executeUpdate();
} catch (SQLException e) {
System.err.println("更新数据错误:" + e.getMessage());
return 0;
} finally {
// 关闭数据库连接资源
closeDBResource();
}
}
以上是我的数据库操作类,我的问题是:我要一次行更新很多条数据,每更新一条之后就后关闭数据库连接资源,然后再重新获取数据库连接资源,每次打开后又关闭,那不是效率很低,应该怎么样改?多谢

解决方案 »

  1.   

    不明白你要批量更新的数据有什么规律,
    可以写一个批量更新的方法,把创建的Connection进行参数传递就可以了,
    不过Connection要注意哪开,就在哪关例如:
    public int executeUpdates(Connection conn, .....)
      

  2.   

    LZ上面的我看了下,确实很乱。
    数据库的操作无外乎4类:添加,查找,更新,删除。
    写一个数据操作的功能类,包括这4类大方向的成员方法。至于你的问题,我建议这样:
    1.建立数据库连接。
    2.暂时将更新数据用的所有SQL语句全部编辑成String串放在功能类的更新方法中(这里不要管你的操作语句有多么的繁琐)。
    3.执行所有的SQL语句。
    4.关闭数据库的连接。
    5.检查有无错误,有错误修改程序。没错误后下面要进行的就是对你的SQL语句(即String操作语句)进行重构,建立一个新方法包含你要进行的操作语句。对这个方法进行修改完善。
      

  3.   


    可以用批量更新。
    int i=0;
    for(;;){
       i++;
        String sql ="update ....";
       stmt.addBatch(sql);
       if(i%100==0)
          stmt.executeBatch();
    }