- 下载 SQLite 版本库
- 编写Uniapp插件
- 不想卷了去插件市场看看-Android Sqlite 3.46.0
- 如需模块化,需要自定义打包,一杯咖啡,联系sunfeixiang2020@163.com 感谢
部分代码如下
@UniJSMethod(uiThread = false)
public boolean isOpenDatabase(String name) {
SQLiteDatabase database = map.get(name);
return database != null && database.isOpen();
}
@UniJSMethod(uiThread = false)
public void openDatabase(String name, UniJSCallback success, UniJSCallback fail) {
if (openDatabase(name, fail)) {
success(success);
}
}
@UniJSMethod(uiThread = false)
public void closeDatabase(String name, UniJSCallback success, UniJSCallback fail) {
final SQLiteDatabase database = map.remove(name);
if (database != null) {
database.close();
}
success(success);
}
@UniJSMethod(uiThread = false)
public void transaction(String name, String opt, UniJSCallback success, UniJSCallback fail) {
if (!isOpenDatabase(name)) {
fail(fail, "database 没有打开");
return;
}
final SQLiteDatabase database = map.get(name);
if (database == null) {
fail(fail, "database 已关闭");
return;
}
switch (opt) {
case "begin":
database.beginTransaction();
success(success);
break;
case "commit":
database.setTransactionSuccessful();
database.endTransaction();
success(success);
break;
case "rollback":
database.endTransaction();
success(success);
break;
default:
fail(fail, "指令不正确,仅支持begin,commit,rollback");
break;
}
}
@UniJSMethod(uiThread = false)
public void executeSql(String name, JSONArray sqlList, UniJSCallback success, UniJSCallback fail) {
if (!isOpenDatabase(name)) {
fail(fail, "database 没有打开");
return;
}
final SQLiteDatabase database = map.get(name);
if (database == null) {
fail(fail, "database 已关闭");
return;
}
if (sqlList.isEmpty()) {
fail(fail, "没有需要执行的sql");
return;
}
try {
for (int i = 0; i < sqlList.size(); ++i) {
String s = sqlList.getString(i);
if (!TextUtils.isEmpty(s.trim())) {
database.execSQL(s);
}
}
success(success);
} catch (Exception e) {
fail(fail, e.toString());
}
}
@UniJSMethod(uiThread = false)
public void selectSql(String name, String sql, UniJSCallback success, UniJSCallback fail) {
if (!isOpenDatabase(name)) {
fail(fail, "database 没有打开");
return;
}
final SQLiteDatabase database = map.get(name);
if (database == null) {
fail(fail, "database 已关闭");
return;
}
if (sql == null || sql.isEmpty()) {
fail(fail, "没有需要执行的sql");
return;
}
try (Cursor cursor = database.rawQuery(sql, null)) {
List<Map<String, Object>> list = new ArrayList<>();
if (cursor.moveToFirst()) {
String[] names = cursor.getColumnNames();
int length = names.length;
do {
Map<String, Object> obj = new HashMap<>();
for (int i = 0; i < length; ++i) {
int type = cursor.getType(i);
switch (type) {
case Cursor.FIELD_TYPE_NULL:
obj.put(names[i], org.json.JSONObject.NULL);
break;
case Cursor.FIELD_TYPE_INTEGER:
case Cursor.FIELD_TYPE_STRING:
BigDecimal decimal = new BigDecimal(String.valueOf(cursor.getDouble(i)));
obj.put(names[i], decimal.doubleValue());
break;
case Cursor.FIELD_TYPE_FLOAT:
obj.put(names[i], cursor.getString(i));
break;
case Cursor.FIELD_TYPE_BLOB:
obj.put(names[i], Arrays.toString(cursor.getBlob(i)));
}
}
list.add(obj);
} while (cursor.moveToNext());
}
success(success, list);
} catch (Exception e) {
fail(fail, e.toString());
}
}