`
ranyut
  • 浏览: 254917 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

SQLite文本数据库JDBC连接使用介绍

阅读更多
SQLite文本数据库JDBC连接使用介绍
 
SQLite三种JDBC驱动的区别
 
 
SQLite Wrapper by Christian
http://www.ch-werner.de/javasqlite/
这个驱动其实是在本地C/C++的SQLite上用JDBC实现进行了包装。大小100+K。
优点:体积小;速度快
缺点:依赖本地SQLite驱动
 
 
SQLite Zentus Driver
http://www.zentus.com/sqlitejdbc/
这个驱动是SQLite数据库的纯Java实现,仅需要这个驱动就可以操作SQLite数据库文件。大小2.6M。
优点:无其他依赖
缺点:速度稍慢(纯Java实现)
 
 
SQLite Xerial Driver
http://www.xerial.org/trac/Xerial/wiki/SQLiteJDBC
这个驱动扩展了Zentus版本,并且在jar中加入了Windows、Linux、Mac OS X三种本地SQLite驱动库,使四种驱动并存于jar包中。其目的在于在不同的操作系统中自动使用不同的本地驱动(在这三种以外的系统中则使用纯Java实现的驱动),既保证无其他依赖,又保证速度最快。但是因为包含这么多版本的驱动,所以就比较大,大小有3M。
优点:速度快;无其他依赖
缺点:体积大
 
 
xerial官方网站
 
注意sqlite-jdbc-3.8.5-pre1.jar 、sqlite-jdbc4-3.8.2-SNAPSHOT.jar 这两个版本在Linux服务器上有BUG
会出现 java.lang.NoClassDefFoundError: org/sqlite/NativeDB
解决方法:使用版本 sqlite-jdbc-3.7.15-M1.jar 
 
 
使用Demo
 
public class JDBCConnectionUtil {
 
 private ThreadLocal<Connection> threadLocal = new ThreadLocal<Connection>();
 
 private static Logger logger = Logger.getLogger(JDBCConnectionUtil.class);
 
 public Connection getConnection() throws Exception {
  Connection connection = threadLocal.get();
  if (connection == null || connection.isClosed()) {
   try {
    Class.forName("org.sqlite.JDBC");
    connection = DriverManager.getConnection("jdbc:sqlite:D\:/kaven/workcopy/Database.db");
    threadLocal.set(connection);
   } catch (Exception e) {
    logger.error("获取JDBC连接出错", e);
    throw e;
   }
  }
  return connection;
 }
 
 public int executeUpdate(String sql) throws Exception{
  Connection connection = null;
  Statement stmt = null;
  int res = 0;
  try {
   connection = getConnection();
   connection.setAutoCommit(false);
   stmt = connection.createStatement();
   res = stmt.executeUpdate(sql);
   
   connection.commit();
   stmt.close();
   connection.close();
   return res;
  } catch (Exception e) {
   logger.error("", e);
   throw e;
  }
 }
 
 /**
  * 判断表是否存在
  * @param tableName 表名
  * @return
  * @throws Exception
  */
 public static boolean isExist(String tableName) throws Exception {
  JDBCConnectionUtil util = new JDBCConnectionUtil();
  String testSQL = "select id from "+tableName;
  Connection connection = null;
  Statement stmt = null;
  try {
   connection = util.getConnection();
   stmt = connection.createStatement();
   stmt.executeQuery(testSQL);
  }catch(Exception e){
   if(e.getMessage() != null && e.getMessage().indexOf("no such table: "+tableName) != -1){
    return false;
   }
   throw e;
  }
  return true;
 }
}
}
 
 
图形化客户端工具
Sqliteman-win32
 
该工具有个Bug:图形化操作时,在原表上添加新的字段时会把原来的PK主键弄掉,而且不能重新设置(使用SQL语句也不行,SQLite不支持设置主键约束的SQL指令)
解决办法:在工具中直接写SQL语句添加新字段。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics