SQLite2MySQL 转换

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

 

©️2020 CSDN 皮肤主题: 岁月 设计师:pinMode 返回首页