您的位置:首页 > 数据库 > MySQL

一种sqlite DB文件数据转存入Mysql的方法

2017-06-15 17:03 309 查看
由于自己的小项目中需要将sqlite数据库文件数据转存入mysql供服务器端计算或存储使用,网上搜集了一些转换方法,其中有些需要下载额外软件比如Sqlite Expert或者MySql数据库管理工具(Native)等,而这些软件自己以后开发过程中很少使用,加上自己本本各项硬件性能限制,最后还是选用Java来实现。希望对需要实现sqlite转存mysql,而且也是对java比较熟悉的人伙伴有所帮助。

另外,关于服务器端不用sqlite而转存mysql的原因,可以看这篇博文:

选择数据库SQLite还是MySQL?

下面切入正题:

使用JDBC连接数据库配置大同小异,sqlite数据库以单个文件的形式存在,只需驱动及url名称即可。(此处代码实现中sqlite参数配置在properties中,获取封装在JDBCUtils工具类中而mysql使用c3p0数据库连接池,getConnection()由C3P0Utils工具类提供。)

事务和批处理混合使用,Junit亲测24300条记录批处理耗时耗时500ms,整个方法执行耗时2000ms。代码如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import org.junit.Test;
/**
* 实现数据从sqlite单文件数据库转存入mysql
* @author Cassie
*
*/
public class DB2Mysql {

@Test
/**
* 事务和批处理混合使用,将数据从sqlite单文件数据库转存入mysql
*/
public void DB2Mysql() {

Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
Connection sqlConn = null;
PreparedStatement pstmt = null;

try {
// sqlite,配置在properties文件中,自己封装了JDBCUtils类获取
Class.forName(JDBCUtils.getProperty("driverClassName")); // 静态方法调用了启动类加载器,确保该类被加载并已连接
conn = DriverManager.getConnection(JDBCUtils
.getProperty("connectionName"));
stmt = conn.prepareStatement("select * from wifidatabase");
rs = stmt.executeQuery();
// mysql,通过c3p0连接池配置
sqlConn = C3P0Utils.getConnection();
sqlConn.setAutoCommit(false);// 将自动提交关闭
String sql = "INSERT INTO ap_info(bssid,ssid,rss,area,x,y,time) VALUES(?,?,?,?,?,?,?)";
pstmt = sqlConn.prepareStatement(sql);

while (rs.next()) {
pstmt.setString(1, rs.getString("BSSID"));
pstmt.setString(2, rs.getString("SSID"));
pstmt.setString(3, rs.getString("level"));
pstmt.setString(4, rs.getString("area"));
pstmt.setString(5, rs.getString("x"));
pstmt.setString(6, rs.getString("y"));
pstmt.setString(7, rs.getString("time"));
pstmt.addBatch();
}

pstmt.executeBatch();// 执行批处理!
sqlConn.commit();// 执行完后,手动提交事务
sqlConn.setAutoCommit(true);// 再把自动提交打开

sqlConn.close();
conn.close();
} catch (Exception e) {
System.out.println(e.getMessage());
System.out.println(e.toString());
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sqlite 数据库 java mysql
相关文章推荐