package com.yutou.bilibili.sqlite; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import java.io.File; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; public class SQLiteManager { protected Connection conn; private String url = "jdbc:sqlite:"; private File sql; public void startBatch() { try { conn.setAutoCommit(false); } catch (SQLException e) { com.yutou.bilibili.Tools.Log.e(e); } } public void closeBatch() { try { conn.setAutoCommit(true); } catch (SQLException e) { com.yutou.bilibili.Tools.Log.e(e); } } public void close() { try { conn.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } public void commit() { try { conn.commit(); } catch (SQLException e) { com.yutou.bilibili.Tools.Log.e(e); } } protected SQLiteManager() { } private void createSql(JSONObject json) { try { sql.mkdirs(); sql.delete(); conn = DriverManager.getConnection(url + sql.getAbsolutePath()); } catch (Exception e) { com.yutou.bilibili.Tools.Log.e(e); } startBatch(); JSONArray array = json.getJSONArray("table"); for (Object o : array) { com.yutou.bilibili.Tools.Log.i("创建表:" + ((JSONObject) o).getString("name")); createSqlOfTable((JSONObject) o); } closeBatch(); } private void createSqlOfTable(JSONObject table) { String tableName = table.getString("name"); try { Statement statement = conn.createStatement(); JSONArray items = table.getJSONArray("item"); StringBuilder sql = new StringBuilder(); sql.append("CREATE TABLE `") .append(tableName) .append("` ("); for (Object item : items) { StringBuilder builder = new StringBuilder(); JSONObject it = (JSONObject) item; String type; switch (it.getString("type")) { case "int": type = " INTEGER "; break; case "TIME": type = " NUMERIC "; break; default: type = " TEXT "; break; } builder.append("`") .append(it.getString("name")) .append("`") .append(type) .append(it.getBoolean("isNull") ? "" : " NOT NULL ") .append(it.getBoolean("isKey") ? " PRIMARY KEY AUTOINCREMENT " : "") .append(","); sql.append(builder.toString()); } sql.append(");"); statement.execute(sql.toString().replace(",);", ");")); statement.closeOnCompletion(); } catch (Exception e) { com.yutou.bilibili.Tools.Log.e(e); } } protected void build(JSONObject json) { try { Class.forName("org.sqlite.JDBC"); if ("load".equals(json.getString("model"))) { sql = new File(json.getString("file")); } else { sql = new File("databases" + File.separator + json.getString("file")); } if (!sql.exists()) { createSql(json); } else { conn = DriverManager.getConnection(url + sql.getAbsolutePath()); } } catch (Exception e) { com.yutou.bilibili.Tools.Log.e(e); } } public boolean setDB(String fileName) { try { Class.forName("org.sqlite.JDBC"); sql = new File("db" + File.separator + fileName); if (sql.exists()) { if (conn != null && !conn.isClosed()) { conn.close(); } conn = DriverManager.getConnection(url + sql.getAbsolutePath()); return true; } } catch (Exception e) { com.yutou.bilibili.Tools.Log.e(e); } return false; } public static void main(String[] args) { } }