SQLite2MySQL 转换

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: SQLite2MySQL还是得用工具,而且必须纯福利的才行(po jie ban)。网友推荐这神器,ESF Database Migration Toolkit Professional v7.3.

SQLite2MySQL

还是得用工具,而且必须纯福利的才行(po jie ban)。网友推荐这神器,ESF Database Migration Toolkit Professional v7.3.27

v6 的不行,很多字段转不了,用 v7 or v8 吧!

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查询的问题了!

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
开发工具
npm install 卡死问题解决
npm install 卡死问题解决
1316 0
白嫖!字节跳动 Java岗顶级面试解析(2023版),GitHub巅峰神作!
开始之前,先说一下我非常推荐的一种学习方式: 带着问题学习或者准备面试。 另外,准备面试的小伙伴,一定要根据自身情况制定好复习计划! 并且,你最好还要时不时自测一下,对着一些面试常见的问题进行自问。 最近,我分析了上百份大中小厂的面经,发现了许多Java 面试中最最最常问的一些问题!并且都在字节跳动 Java面试顶级解析(2023版)小册里面找到了对应的题目和答案,小伙伴们可以对照着学习或者准备面试。
|
监控 前端开发 JavaScript
Sentry 监控部署与使用(详细流程)
Sentry 监控部署与使用(详细流程)
2162 0
|
人工智能 运维 负载均衡
10 分钟构建 AI 客服并应用到网站、钉钉或微信中
《10分钟构建AI客服并应用到网站、钉钉或微信中》的解决方案通过详尽的文档和示例代码,使具有一定编程基础的用户能够快速上手,顺利完成AI客服集成。方案涵盖高可用性、负载均衡及定制化选项,满足生产环境需求。然而,若文档不清晰或存在信息缺失,则可能导致部署障碍。实际部署中可能遇到网络、权限等问题,需逐一排查。云产品的功能、性能及操作配置便捷性直接影响解决方案效果,详尽的产品手册有助于快速解决问题。总体而言,该方案在各方面表现出色,值得推荐。
503 34
|
Docker 容器
『Docker Compose』使用国内镜像极速安装Docker Compose
📣读完这篇文章里你能收获到 - 使用国内镜像极速安装Docker Compose
21190 0
『Docker Compose』使用国内镜像极速安装Docker Compose
|
jenkins Java 持续交付
Jenkins 迁移及安装
Jenkins 迁移及安装
|
Web App开发 数据安全/隐私保护
【chrome】谷歌chrome浏览器离线安装包的获取及使用技巧
【chrome】谷歌chrome浏览器离线安装包的获取及使用技巧
|
网络虚拟化 计算机视觉
Homebrew下载速度优化(已解决问题)
Homebrew下载速度优化(已解决问题)
2018 1
|
Shell
❤️npm常用命令以及npm publish常见问题处理方法❤️
❤️npm常用命令以及npm publish常见问题处理方法❤️
517 0
❤️npm常用命令以及npm publish常见问题处理方法❤️

热门文章

最新文章