黑马程序员技术交流社区
标题:
怎么样才可以调数据库的写入效率
[打印本页]
作者:
张绍成
时间:
2011-12-23 21:18
标题:
怎么样才可以调数据库的写入效率
本帖最后由 tianshan20081 于 2011-12-25 15:32 编辑
今天找到一的200多M的txt 文件。文件格式表规范。
代码:
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(new
FileInputStream("D:\\TDDownload\\XXX.sql")));
String text ;
int i = 0 ;
System.out.println(new Timestamp(System.currentTimeMillis()));
while((text = br.readLine())!= null){
String[] ss= text.split("#");
User u = new User();
u.setUsername(ss[0].trim());
u.setPassword(ss[1].trim());
u.setEmail(ss[2].trim());
UserDao ud = new UserDao();
ud.addUser(u);
i++ ;
}
System.out.println(i);
System.out.println(new Timestamp(System.currentTimeMillis()));
}
复制代码
public void addUser(User u){
Connection conn = DBUtil.getconn();
PreparedStatement ps = null ;
String sql = "insert into tb_csdnuser(username,password,email) values(?,?,?)";
try {
// System.out.println(u.getUsername()+"#"+u.getPassword()+"#"+u.getEmail());
ps = conn.prepareStatement(sql);
ps.setString(1, u.getUsername());
ps.setString(2, u.getPassword());
ps.setString(3, u.getEmail());
ps.execute();
DBUtil.commit(conn);
} catch (SQLException e) {
DBUtil.rollback(conn);
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
DBUtil.closeConn(conn);
DBUtil.closePS(ps);
}
}
复制代码
都写了好几个小时了 还没写完!
我的代码有哪些地方可以提高效率!
作者:
张乐乐
时间:
2011-12-24 09:09
一次只执行一条语句、这对于处理大量更新命令的效率不高、JDBC 2引入的批更新方式用于处理非select的命令、将这些命令都搜集起来、一起执行。
//add SQL commands to the batch
statement.addBatch("insert into test values (1,'smith');
statement.addBatch("insert into test values (1,'smith');
//Execute the batch
int count[] = statement.executeBatch();
复制代码
如果真要用批处理、还要判断你的驱动程序是否支持批更新、MySql Access Oracle JDBC驱动器都支持的。
connection.getMetaData().supportsBatchUpdates()
复制代码
判断是否可以支持批更新
--------------------------------------------------------------------华丽丽的分割线---------------------------------------------------------------
那么对于这600万的数据、那么一句一句的添加将会浪费很多时间。
对于你的这段、除了需要用批更新外、还需要优化的不要都输出一遍吧、哥们、600万啊。我感觉这输出没必要了吧。还有就是你没添加一个信息就关闭了连接、然后下次就是重新连接。这样也很浪费时间的。
作者:
冯瑞君老师
时间:
2011-12-24 15:00
写个dao类,把jdbc封装了,每次用的时候调用它,会减少很多的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2