Sqlite China  
首页 | 各种语言的sqlite编程 | sqlite研究 |sqlite应用实例与杂谈 | sqlite相关下载 | SQlite论坛
当前位置 : 主页>sqlite研究>列表
sqlite 的相关调查2
来源:工友 作者:工友 时间:2007-12-21

2.3.2 使用事务与否的比较

使用jdbc测了一下sqlite3的插入数据的效率,使用整体事务与不使用整体事务,差别非常明显。 cpu: 1G, 内存:512MB

使用整体事务:1000000条记录,需要93秒钟。

使用逐个插入提交事务:1秒钟只能处理20条记录。

2.3.3 JDBC 中使用SQLite Attach

如何同时使用光盘Sqlite数据库和可读写的Sqlite临时表的解决方案。

系统设置:

     在服务器端放置Sqlite临时表数据库文件。

程序处理:

1.  通过ATTACH命令建立指向服务器端Sqlite数据库的连接字符串。

2.  利用连接字符串同时使用数据表和临时表。(main指向自身)

3.  使用结束以后,释放连接字符串。

DAO

CD/DVD Sqlite

JDBCConnection

只读数据表

 

DAO使用ATTACH命令建立连接

 

服务器端Sqlite

可读写临时表


此部分处理可以考虑共通化,后继程序使用统一的固定连接字符串XXXX访问临时表

 

DAO中同时使用光盘Sqlite数据库和Sqlite临时表的例子:

       //通过ATTACH命令建立指向Sqlite临时表数据库的连接字符串

         Statement stmt =con.createStatement();

       sql= "attach database 'c:/sqlite/test.db' as dbtest" ;

       stmt.executeUpdate(sql);

      

      //利用连接字符串同时使用数据表和临时表。(main指向自身)

      sql="insert into dbtest.testtbl(id)

      select main.bfs.id from dbtest.bfs, main.bfs where main.bfs.id=dbtest.bfs.id";

      stmt.executeUpdate(sql);

    //此部分处理可以考虑共通化,统一释放固定连接字符串XXXX

      //使用结束以后,释放连接字符串

      sql="detach dbtest";

      stmt.executeUpdate(sql);

2.3.4 JDBC 中使用preparedstatement

使用preparedstatement时,做长时间大量数据的插入时,会出现内存泄漏,导致插入速度变慢。在select的时候没有发现这个问题。

可以使用Statement来解决,但是对于字符串在拼接SQL语句时,需要先content.replaceAll(“’”, “’’”), 即把其中的单引号换成连续的两个单引号。

2.4 DAO层的修改

2.4.1 DAOFactory

DAOFactory类中修改函数getCreator,用来生成SQLite相关的对象。

     public static DAOCreator getCreator(int aDBType) {

              if (aDBType == DAOFactory.DB_TYPE_SQLITE) {

                     return new SQLiteDAOCreator();

              } else {

                     int type = getConfiguration();

                     switch (type) {

                     case DB_TYPE_ORA:

                            return new OracleDAOCreator();

                     case DB_TYPE_SQLSERVER:

                            return new SQLServerDAOCreator();

                     default:

                            final LogManager LOG = new LogManager(DAOFactory.class

                                          .getName());

                            BtLogMessage msg = new BtLogMessage();

                            msg.setOptFail("Parameter is not valid.");

                            LOG.fatal(msg);

                            return null;

                     }

              }

       }

2.4.2 SQLiteDAOCreator

SQLiteDAOCreator中生成SQLite相关对象时,为每个对象重写方法getConnection

              public SearchSelectDAO getSearchSelectDAO() throws OprtException {

              final String METHOD_NAME = "getSearchSelectDAO";

              // TODO Auto-generated method stub

              return new SQLiteSearchSelectDAO() {

                     public void getConnection() throws OprtException {

                            this.con = SQLiteBaseDAOUtil.getConnection(this

                                          .getSqliteDBFile());

                     }

 

              };

2.4.3 SQLiteBaseDAOUtil

public class SQLiteBaseDAOUtil {

       private static final String CLASS_NAME = "SQLiteBaseDAOUtil";

       public static Connection getConnection(String sqliteDBFile) throws OprtException {

              // TODO Auto-generated method stub

              final String METHOD_NAME = "getConnection";

              if (sqliteDBFile == null){

                     throw new OprtException

(CLASS_NAME,METHOD_NAME, "No data file specified", null, null);

              }           

              try {

                     Class.forName("SQLite.JDBCDriver");

                     return DriverManager.getConnection("jdbc:sqlite:/" + sqliteDBFile, "", "");

              } catch (ClassNotFoundException e) {

                     // TODO Auto-generated catch block

                     throw new OprtException

(CLASS_NAME,METHOD_NAME, "No suitable driver", null, e);

              } catch (SQLException e) {

                     // TODO Auto-generated catch block

                     throw new OprtException(CLASS_NAME,METHOD_NAME,

"Error when connect to SQLite Database", null, e);

              }

       }

}

2.4.4 如何使用

l         直接使用DAO

              SearchSelectDAO dao = DAOFactory. getCreator(DAOFactory.DB_TYPE_SQLITE)

.getSearchSelectDAO();

              dao.setSqliteDBFile(DiskUtil.getSQLiteDBFile());

              //SQLiteSearchSelectDAO的构造方法中不再调用getConnection方法

dao.getConnection();

              dao.findTitle(11);

l         利用Manager间接使用DAO

              SearchManager searchManager = new SearchManager();

              searchManager.setSQLite(true);

              searchManager.setSqliteDBFile(DiskUtil.getSQLiteDBFile());

              searchManager.test();

   Manager中使用到的DAO类时,参考“直接使用DAO

(阅读次数:
上一篇:sqlite 的相关调查1 下一篇:在VC6.0中使用C++访问sqlite数据库
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
§最新评论
热点文章
·SQLite数据库的体系结构
·SQLite与其他数据库的速度
·SQL 语言参考资料
·SQLite语法备忘录
·sqlite 的相关调查1
·嵌入式数据库SQLite的一份
·SQLite在嵌入式Web服务器
·点评主流开源数据库的技术
·基于ARM-Linux的SQLite嵌
·SQLite与其他数据库的速度
·SQLite数据库编程--创建数
·SQL 语法手册
·SQLite Mode 数据库交互的
·SQLITE3 使用总结(3)
·XXTEA加密算法为SQLite 3.
·SQLite 第三版总览(简介)
·SQLite 第三版中的数据类
·用sqlite 执行标准 sql 语
·System.Data.Sqlite 上手
·SQLite编译安装步骤
相关文章
·SQLite Mode 数据库交互的
·SQL 语言参考资料
·SQLite在嵌入式Web服务器
·SQL 语法手册
·System.Data.Sqlite 上手
·SQLite数据库编程--创建数
·SQLite数据库编程--数据库
·SQLite在TorqueScript中的
·关于sqlite_exec回调函数
·用sqlite 执行标准 sql 语

版权Power by DedeCms   后台登陆
Copyright @ 2007