通用的DAO雏形

类别:Java 点击:0 评论:0 推荐:

/*
 * Created on 2004-10-13
 */

/**
 * @author liuwei
 */

import java.sql.*;

public class TestResultSet {
 /**
  *更新操作
  *
  * @param s
  * @throws SQLException
  */
 public static void updateRow(Statement s) throws SQLException {
  ResultSet rs = s.executeQuery("Select * from test");
  rs.next();
  rs.updateString(1, "222");
  rs.updateString(2, "LiuWei");
  rs.updateObject(3, new Integer(3));
  rs.updateRow();
 }

 /**
  * 插入操作
  *
  * @param s
  * @throws SQLException
  */
 public static void insertRow(Statement s) throws SQLException {
  //读取空的结果集,从中取得表的结构
  ResultSet rs = s.executeQuery("Select * from test where 1<>1");
  for (int i = 0; i < 1000; i++) {
   rs.moveToInsertRow();
   rs.updateObject(1, new String("333"));
   rs.updateObject(2, new String("Leo"));
   rs.updateObject(3, new Integer(3));
   
   rs.insertRow();
  }
 }

 public static void main(String[] args) {
  Connection con = null;
  try {
   Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
   con = DriverManager
     .getConnection(
       "jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=pubs",
       "sa", "");
  //直接调用execute的操作
   long begin = System.currentTimeMillis();
   Statement s = con.createStatement();
   for (int i = 0; i < 1000; i++)
    s.execute("insert into test values('333','Leo', 3)");
   long end = System.currentTimeMillis();
   System.out.println(begin - end);
   s.execute("delete from test");

   //用ResultSet进行操作的性能测试
   Statement ss = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
     ResultSet.CONCUR_UPDATABLE);
   begin = System.currentTimeMillis();
   insertRow(ss);
   end = System.currentTimeMillis();
   System.out.println(begin - end);
   s.execute("delete from test");
  //用批处理的性能
   String sql = "insert into test values('333','Leo', 3)";
   begin = System.currentTimeMillis();
   Statement s3 = con.createStatement();
   for (int i = 0; i < 1000; i++)
    s3.addBatch(sql);
   s3.executeBatch();
   end = System.currentTimeMillis();
   System.out.println(begin - end);
   s.execute("delete from test");

   /*
    * while (rs.next()){ System.out.println(rs.getString(2)); }
    */
   con.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

}
从结果中可以看出,这种方式的性能在不考虑读取表结构的操作时,还可接受(与直接insert性能查不多),但这种方式免去了用大量代码去拼Sql的工作。

本文地址:http://com.8s8s.com/it/it14611.htm