* 注释部分就有插入的 *** 作
*/
package sqlIte
import java.sql.Connection
import java.sql.DriverManager
import java.sql.ResultSet
import java.sql.SQLException
import java.sql.Statement
/**
* @author Administrator
*
*/
public class Test {
/**
* @author : haoming
* @date : 2012-11-28上午10:02:36
* @111 sqlIte.SqlIteTest.java.main
* @returnType : void
* @desc :
*/
public static void main(String[] args) {
Connection conn = null
Statement stat = null
ResultSet rs=null
try {
Class.forName("org.sqlite.JDBC")
conn = DriverManager.getConnection("jdbc:sqlite:test.db")
conn.setAutoCommit(false)
stat = conn.createStatement()
// stat.executeUpdate("create table people (name, occupation)")
// stat.executeUpdate("insert into people values ('Gandhi', 'politics')")
// stat.executeUpdate("insert into people values ('Turing', 'computers')")
// stat.executeUpdate("insert into people values ('Wittgenstein', 'smartypants')")
conn.commit()
rs = stat.executeQuery("pragma table_info(people)")
while(rs.next()){
System.out.println(rs.getString("cid")+"~"+rs.getString("name")+"~"+rs.getString("type")+"~"+rs.getString("notnull")+"~"+rs.getString("dflt_value")+"~"+rs.getString("pk"))
}
rs = stat.executeQuery("select * from people")
while (rs.next()) {
System.out.println("name = " + rs.getString("name"))
System.out.println("occupation = " + rs.getString("occupation"))
}
rs.close()
conn.close()
} catch (ClassNotFoundException e) {
e.printStackTrace()
} catch (SQLException e) {
e.printStackTrace()
}
}
}
解决方法:添加事务处理,把5000条插入作为一个事务
dataBase.beginTransaction() //手动设置开始事务
//数据插入 *** 作循环
dataBase.setTransactionSuccessful() //设置事务处理成功,不设置会自动回滚不提交
dataBase.endTransaction() //处理完成
将数据库「倒出来」:
sqlite3 film.db ".dump" >output.sql
利用输出的资料,建立一个一模一样的数据库(加上以上指令,就是标准的SQL数据库
备份了):
sqlite3 film.db <output.sql
在大量插入资料时,你可能会需要先打这个指令:
begin
插入完资料后要记得打这个指令,资料才会写进数据库中:
commit
用SQLITE插入商品数据,发现才500条 就需要10多秒时间,太慢了。后来查了一下原因。如下:大量插入数据 SQLITE插入一条数据,事务就会被反复地开启、关闭,会增大IO量。如果在插入数据前显式开启事务,插入后再一起提交,则会大大提高IO效率,进而加数据快插入速度。
根据测试结果:不预先开启事务,效率20 条/s。预先开启事务效率34095条/s。
这个效率差距挺大的。
//预先开启事务
db.execDML("begin")
//提交并关闭事务
db.execDML("commit")
加上后,几百条商品数据1秒都不要 就插入完毕了,不错。
记录一下
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)