SQLite插入数据

SQLite插入数据,第1张

/**

* 注释部分就有插入的 *** 作

*/

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秒都不要 就插入完毕了,不错。

记录一下


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11617084.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存