151 lines
4.4 KiB
Java
151 lines
4.4 KiB
Java
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) {
|
|
|
|
}
|
|
}
|