SQLite2MySQL
还是得用工具,而且必须纯福利的才行(po jie ban)。网友推荐这神器,ESF Database Migration Toolkit Professional v7.3.27
v6 的不行,很多字段转不了,用 v7 or v8 吧!
http://download.csdn.net/detail/liema2000/5169824
http://www.ttrar.com/html/ESF-Database-Migration-Toolkit-Profe.html
ESF Database Migration Toolkit Pro 8.2.07 | 37 Mb
SQL COUNT 函数返回 int
RS 获取 COUNT() 值的时候,直接 getInt(1) 抛出 before start 异常,必须先 resultset.next() 一下才行;SQLite 无须这样
SELECT COUNT(id) AS count FROM news WHERE
JDBC 兼容代码如下:
if(jdbcConn.toString().indexOf("MySQL") != -1){
arr = resultset.next() ? resultset.getInt(1) : null;
}else{
// sqlite
arr = resultset.isBeforeFirst() ? resultset.getInt(1) : null;
}
后来发现 SQLite 用 MySQL 的方法也行。
不能获取 mysql alias 名称
获取表各个字段的元数据时,发现不能获取 mysql alias 名称,也就是 table.xx AS foo,不能遍历出这个 foo。
var columnName = ResultSetMetaData.getColumnName(colIndex);
后来发现应该用 getColumnLabel() 而不是 getColumnName();
觉得 SQLite 不够严谨,而 MySQL 有作区分了。
CREATE 返回主键
必须这样,SQLIite 不用。
rowNumber = statement.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS);
ResultSet rs = statement.getGeneratedKeys();// 创建新纪录,返回id
if (rs.next()) {
rowNumber = rs.getInt(1);
// System.out.println("数据主键:" + id);
}
Sqlite-JDBC查询datetime类型抛异常
使用标准JDBC接口查询日期时间类型datetime会出现各种问题!查询语句如下:
ResultSet rs = stmt.executeQuery("SELECT id, name, createTime FROM employee");
System.out.println("createTime = " + rs.getTimestamp("createTime"));
测试发现:
使用sqlite-jdbc-3.7.2.jar时,查询结果是“1970-01-01 08:00:02.015”;
使用sqlite-jdbc-3.8.11.2.jar时,抛异常java.sql.SQLException: Error parsing time stamp;
看了下两个版本的源码,发现sqlite-jdbc的3.8与3.7的代码完全不一样,是被重写过了!
下载地址:https://bitbucket.org/xerial/sqlite-jdbc/downloads
解决办法:
采用最新版本sqlite-jdbc-3.8.11.2.jar,然后
Class.forName("org.sqlite.JDBC");
Properties pro = new Properties();
pro.put("date_string_format", "yyyy-MM-dd HH:mm:ss"); //默认是yyyy-MM-dd HH:mm:ss.SSS,覆盖为yyyy-MM-dd HH:mm:ss;
c = DriverManager.getConnection("jdbc:sqlite:c:/db/test.db", pro);
这时候,调用JDBC查询是正常的!
如果使用了spring,可以通过dataSource的参数注入,来配置Connection的参数!这里使用了com.alibaba.druid.pool.DruidDataSource数据源,可以注入一个connectProperties属性,类型是Properties,键是date_string_format,值是yyyy-MM-dd HH:mm:ss;
这样就能解决datetime查询的问题了!
另外还可以看看 DB2DB:http://www.cnblogs.com/limeiky/p/8288195.html