feat: rewrite sqlite demo

This commit is contained in:
gaoshuaixing
2024-12-28 13:04:09 +08:00
parent 83f6cc33b1
commit 2d6c569292
5 changed files with 147 additions and 182 deletions

View File

@@ -9,7 +9,7 @@ const { getExtraResourcesDir } = require('ee-core/ps');
const { logger } = require('ee-core/log');
const { getConfig } = require('ee-core/config');
const { frameworkService } = require('../service/framework');
const { frameworkService } = require('../service/database/sqlitedb');
const { sqlitedbService } = require('../service/database/sqlitedb');
/**
* framework - demo
@@ -38,7 +38,7 @@ class FrameworkController {
try {
// test
Services.get('database.sqlitedb').getDataDir();
sqlitedbService.getDataDir();
} catch (err) {
console.log(err);
data.code = -1;
@@ -47,26 +47,26 @@ class FrameworkController {
switch (action) {
case 'add' :
data.result = await Services.get('database.sqlitedb').addTestDataSqlite(info);;
data.result = await sqlitedbService.addTestDataSqlite(info);;
break;
case 'del' :
data.result = await Services.get('database.sqlitedb').delTestDataSqlite(delete_name);;
data.result = await sqlitedbService.delTestDataSqlite(delete_name);;
break;
case 'update' :
data.result = await Services.get('database.sqlitedb').updateTestDataSqlite(update_name, update_age);
data.result = await sqlitedbService.updateTestDataSqlite(update_name, update_age);
break;
case 'get' :
data.result = await Services.get('database.sqlitedb').getTestDataSqlite(search_age);
data.result = await sqlitedbService.getTestDataSqlite(search_age);
break;
case 'getDataDir' :
data.result = await Services.get('database.sqlitedb').getDataDir();
data.result = await sqlitedbService.getDataDir();
break;
case 'setDataDir' :
data.result = await Services.get('database.sqlitedb').setCustomDataDir(data_dir);
data.result = await sqlitedbService.setCustomDataDir(data_dir);
break;
}
data.all_list = await Services.get('database.sqlitedb').getAllTestDataSqlite();
data.all_list = await sqlitedbService.getAllTestDataSqlite();
return data;
}
@@ -168,7 +168,7 @@ class FrameworkController {
/**
* 异步消息类型
*/
async ipcInvokeMsg(args, event) {
async ipcInvokeMsg(args) {
let timeNow = dayjs().format('YYYY-MM-DD HH:mm:ss');
const data = args + ' - ' + timeNow;

View File

@@ -11,8 +11,6 @@ const path = require('path');
class BasedbService {
constructor(options) {
super();
const { dbname } = options;
this.dbname = dbname;
this.db = undefined;
@@ -26,14 +24,25 @@ class BasedbService {
// 定义数据文件
const dbFile = path.join(getStorageDir(), "db", this.dbname);
const sqliteOptions = {
driver: 'sqlite',
default: {
timeout: 6000,
verbose: null // 打印sql语法 console.log
}
timeout: 6000,
verbose: console.log
}
const storage = new SqliteStorage(dbFile, sqliteOptions);
this.db = storage.db;
this.storage = new SqliteStorage(dbFile, sqliteOptions);
this.db = this.storage.db;
}
/*
* change data dir (sqlite)
*/
changeDataDir(dir) {
// the absolute path of the db file
const dbFile = path.join(dir, this.dbname);
const sqliteOptions = {
timeout: 6000,
verbose: console.log
}
this.storage = new SqliteStorage(dbFile, sqliteOptions);
this.db = this.storage.db;
}
}

View File

@@ -1,9 +1,7 @@
'use strict';
const { BasedbService } = require('./basedb');
const Storage = require('ee-core/storage');
const _ = require('lodash');
const path = require('path');
/**
* sqlite数据存储
@@ -13,9 +11,10 @@ class SqlitedbService extends BasedbService {
constructor () {
const options = {
dbname:'sqlite-demo.db',
dbname: 'sqlite-demo.db',
}
super(options);
this.userTableName = 'user';
this._initTable();
}
@@ -24,13 +23,12 @@ class SqlitedbService extends BasedbService {
*/
_initTable() {
// 检查表是否存在
const userTableName = 'user';
const masterStmt = this.db.prepare('SELECT * FROM sqlite_master WHERE type=? AND name = ?');
let tableExists = masterStmt.get('table', userTableName);
let tableExists = masterStmt.get('table', this.userTableName);
if (!tableExists) {
// 创建表
const create_user_table_sql =
`CREATE TABLE ${userTableName}
`CREATE TABLE ${this.userTableName}
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name CHAR(50) NOT NULL,
@@ -44,14 +42,8 @@ class SqlitedbService extends BasedbService {
* 增 Test data (sqlite)
*/
async addTestDataSqlite(data) {
//console.log("add data:", data);
let table = 'user';
await this.checkAndCreateTableSqlite(table);
const insert = this.demoSqliteDB.db.prepare(`INSERT INTO ${table} (name, age) VALUES (@name, @age)`);
const insert = this.db.prepare(`INSERT INTO ${this.userTableName} (name, age) VALUES (@name, @age)`);
insert.run(data);
return true;
}
@@ -59,14 +51,8 @@ class SqlitedbService extends BasedbService {
* 删 Test data (sqlite)
*/
async delTestDataSqlite(name = '') {
//console.log("delete name:", name);
let table = 'user';
await this.checkAndCreateTableSqlite(table);
const delUser = this.demoSqliteDB.db.prepare(`DELETE FROM ${table} WHERE name = ?`);
const delUser = this.db.prepare(`DELETE FROM ${this.userTableName} WHERE name = ?`);
delUser.run(name);
return true;
}
@@ -74,14 +60,8 @@ class SqlitedbService extends BasedbService {
* 改 Test data (sqlite)
*/
async updateTestDataSqlite(name= '', age = 0) {
//console.log("update :", {name, age});
let table = 'user';
await this.checkAndCreateTableSqlite(table);
const updateUser = this.demoSqliteDB.db.prepare(`UPDATE ${table} SET age = ? WHERE name = ?`);
const updateUser = this.db.prepare(`UPDATE ${this.userTableName} SET age = ? WHERE name = ?`);
updateUser.run(age, name);
return true;
}
@@ -89,14 +69,8 @@ class SqlitedbService extends BasedbService {
* 查 Test data (sqlite)
*/
async getTestDataSqlite(age = 0) {
//console.log("select :", {age});
let table = 'user';
await this.checkAndCreateTableSqlite(table);
const selectUser = this.demoSqliteDB.db.prepare(`SELECT * FROM ${table} WHERE age = @age`);
const selectUser = this.db.prepare(`SELECT * FROM ${this.userTableName} WHERE age = @age`);
const users = selectUser.all({age: age});
//console.log("select users:", users);
return users;
}
@@ -104,14 +78,8 @@ class SqlitedbService extends BasedbService {
* all Test data (sqlite)
*/
async getAllTestDataSqlite() {
//console.log("select all user");
let table = 'user';
await this.checkAndCreateTableSqlite(table);
const selectAllUser = this.demoSqliteDB.db.prepare(`SELECT * FROM ${table} `);
const selectAllUser = this.db.prepare(`SELECT * FROM ${this.userTableName} `);
const allUser = selectAllUser.all();
//console.log("select allUser:", allUser);
return allUser;
}
@@ -119,8 +87,7 @@ class SqlitedbService extends BasedbService {
* get data dir (sqlite)
*/
async getDataDir() {
const dir = this.demoSqliteDB.getStorageDir();
const dir = this.storage.getStorageDir();
return dir;
}
@@ -132,17 +99,8 @@ class SqlitedbService extends BasedbService {
return;
}
// the absolute path of the db file
const dbFile = path.join(dir, this.sqliteFile);
const sqliteOptions = {
driver: 'sqlite',
default: {
timeout: 6000,
verbose: console.log
}
}
this.demoSqliteDB = Storage.connection(dbFile, sqliteOptions);
this.changeDataDir(dir);
this._initTable();
return;
}
}

View File

@@ -51,11 +51,6 @@ const constantRouterMap = [
name: 'FrameworkSoftwareIndex',
component: () => import('@/views/framework/software/Index.vue')
},
{
path: '/framework/java/index',
name: 'FrameworkJavaIndex',
component: () => import('@/views/framework/java/Index.vue')
},
{
path: '/framework/testapi/index',
name: 'FrameworkTestApiIndex',

View File

@@ -31,12 +31,12 @@
<a-col :span="2">
</a-col>
<a-col :span="5">
<a-button @click="selectDir">
<a-button @click="selectDir()">
修改目录
</a-button>
</a-col>
<a-col :span="5">
<a-button @click="openDir">
<a-button @click="openDir()">
打开目录
</a-button>
</a-col>
@@ -86,7 +86,8 @@
<div class="one-block-2">
<a-row>
<a-col :span="6">
<a-input v-model="search_age" :value="search_age" addon-before="年龄" />
<!-- eslint-disable-next-line vue/no-v-model-argument -->
<a-input v-model:value="search_age" addon-before="年龄" />
</a-col>
<a-col :span="3">
</a-col>
@@ -114,12 +115,14 @@
<div class="one-block-2">
<a-row>
<a-col :span="6">
<a-input v-model="update_name" :value="update_name" addon-before="姓名(条件)" />
<!-- eslint-disable-next-line vue/no-v-model-argument -->
<a-input v-model:value="update_name" addon-before="姓名(条件)" />
</a-col>
<a-col :span="3">
</a-col>
<a-col :span="6">
<a-input v-model="update_age" :value="update_age" addon-before="年龄" />
<!-- eslint-disable-next-line vue/no-v-model-argument -->
<a-input v-model:value="update_age" addon-before="年龄" />
</a-col>
<a-col :span="3">
</a-col>
@@ -138,7 +141,8 @@
<div class="one-block-2">
<a-row>
<a-col :span="6">
<a-input v-model="delete_name" :value="delete_name" addon-before="姓名" />
<!-- eslint-disable-next-line vue/no-v-model-argument -->
<a-input v-model:value="delete_name" addon-before="姓名" />
</a-col>
<a-col :span="3">
</a-col>
@@ -155,109 +159,108 @@
</div>
</div>
</template>
<script>
<script setup>
import { ipcApiRoute } from '@/api';
import { ipc } from '@/utils/ipcRenderer';
import { ref, onMounted } from 'vue';
import { message } from 'ant-design-vue';
export default {
data() {
return {
name: '李四',
age: 20,
userList: ['空'],
search_age: 20,
update_name: '李四',
update_age: 31,
delete_name: '李四',
all_list: ['空'],
data_dir: ''
};
},
mounted () {
this.init();
},
methods: {
init() {
const params = {
action: 'getDataDir',
}
ipc.invoke(ipcApiRoute.framework.sqlitedbOperation, params).then(res => {
if (res.code == -1) {
this.$message.error('请检查sqlite是否正确安装', 5);
return
}
const name = ref('李四');
const age = ref(20);
const userList = ref(['空']);
const search_age = ref(20);
const update_name = ref('李四');
const update_age = ref(31);
const delete_name = ref('李四');
const all_list = ref(['空']);
const data_dir = ref('');
this.data_dir = res.result;
this.getAllTestData();
})
},
getAllTestData () {
const params = {
action: 'all',
}
ipc.invoke(ipcApiRoute.framework.sqlitedbOperation, params).then(res => {
if (res.all_list.length == 0) {
return false;
}
this.all_list = res.all_list;
})
},
selectDir() {
ipc.invoke(ipcApiRoute.os.selectFolder, '').then(r => {
this.data_dir = r;
// 修改数据目录
this.modifyDataDir(r);
})
},
openDir() {
console.log('dd:', this.data_dir);
ipc.invoke(ipcApiRoute.os.openDirectory, {id: this.data_dir}).then(res => {
//
})
},
modifyDataDir(dir) {
const params = {
action: 'setDataDir',
data_dir: dir
}
ipc.invoke(ipcApiRoute.framework.sqlitedbOperation, params).then(res => {
this.all_list = res.all_list;
})
},
sqlitedbOperation (ac) {
const params = {
action: ac,
info: {
name: this.name,
age: parseInt(this.age)
},
search_age: parseInt(this.search_age),
update_name: this.update_name,
update_age: parseInt(this.update_age),
delete_name: this.delete_name,
}
if (ac == 'add' && this.name.length == 0) {
this.$message.error(`请填写数据`);
}
ipc.invoke(ipcApiRoute.framework.sqlitedbOperation, params).then(res => {
console.log('res:', res);
if (ac == 'get') {
if (res.result.length == 0) {
this.$message.error(`没有数据`);
return;
}
this.userList = res.result;
}
if (res.all_list.length == 0) {
this.all_list = ['空'];
return;
}
this.all_list = res.all_list;
this.$message.success(`success`);
})
},
onMounted(() => {
init()
})
function init() {
const params = {
action: 'getDataDir',
}
};
ipc.invoke(ipcApiRoute.framework.sqlitedbOperation, params).then(res => {
if (res.code == -1) {
message.error('请检查sqlite是否正确安装', 5);
return
}
data_dir.value = res.result;
getAllTestData();
})
}
function getAllTestData () {
const params = {
action: 'all',
}
ipc.invoke(ipcApiRoute.framework.sqlitedbOperation, params).then(res => {
if (res.all_list.length == 0) {
return false;
}
all_list.value = res.all_list;
})
}
function selectDir() {
ipc.invoke(ipcApiRoute.os.selectFolder, '').then(r => {
data_dir.value = r;
// 修改数据目录
modifyDataDir(r);
})
}
function openDir() {
console.log('data_dir:', data_dir.value);
ipc.invoke(ipcApiRoute.os.openDirectory, {id: data_dir.value})
}
function modifyDataDir(dir) {
const params = {
action: 'setDataDir',
data_dir: dir
}
ipc.invoke(ipcApiRoute.framework.sqlitedbOperation, params).then(res => {
all_list.value = res.all_list;
})
}
function sqlitedbOperation (ac) {
const params = {
action: ac,
info: {
name: name.value,
age: parseInt(age.value)
},
search_age: parseInt(search_age.value),
update_name: update_name.value,
update_age: parseInt(update_age.value),
delete_name: delete_name.value,
}
if (ac == 'add' && name.value.length == 0) {
message.error(`请填写数据`);
}
ipc.invoke(ipcApiRoute.framework.sqlitedbOperation, params).then(res => {
console.log('res:', res);
if (ac == 'get') {
if (res.result.length == 0) {
message.error(`没有数据`);
return;
}
userList.value = res.result;
}
if (res.all_list.length == 0) {
all_list.value = ['空'];
return;
}
all_list.value = res.all_list;
message.success(`success`);
})
}
</script>
<style lang="less" scoped>
#app-sqlite-db {