-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
b345dd0
commit c59f80f
Showing
10 changed files
with
351 additions
and
8 deletions.
There are no files selected for viewing
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
module.exports = { | ||
dependencies: { | ||
"react-native-sqlite-storage": { | ||
platforms: { | ||
android: { | ||
sourceDir: "../node_modules/react-native-sqlite-storage/platforms/android-native", | ||
packageImportPath: "import io.liteglue.SQLitePluginPackage;", | ||
packageInstance: "new SQLitePluginPackage()" | ||
} | ||
} | ||
} | ||
} | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
CREATE TABLE IF NOT EXISTS yb_test(id_num INTEGER PRIMARY KEY, name TEXT, age INTEGER) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,205 @@ | ||
import SQLite from 'react-native-sqlite-storage'; | ||
|
||
|
||
const db = SQLite.openDatabase( | ||
{ | ||
name: 'dataTrade', | ||
location: 'default', | ||
}, | ||
() => { | ||
console.log('Open Database Successed') | ||
}, | ||
error => { | ||
console.log('ERROR: ' + error); | ||
} | ||
) | ||
|
||
export class SQLiteManager { | ||
constructor() { | ||
this.db = db; | ||
SQLite.DEBUG(true); | ||
SQLite.enablePromise(true); | ||
} | ||
|
||
executeQuery = (sql, params = []) => new Promise((resolve, reject) => { | ||
this.db.transaction((trans) => { | ||
trans.executeSql(sql, params, (trans, results) => { | ||
resolve(results); | ||
}, | ||
(error) => { | ||
reject(error); | ||
}); | ||
}); | ||
}); | ||
|
||
/** | ||
* | ||
* @param {string} tableName Table Name | ||
* @param {Array[Object]} columns The array of column | ||
* @param {Object} columns[i] The 'Object' type | ||
* @param {Object} columns[i].name Row(field) name | ||
* @param {Object} columns[i].dataType SQL data type | ||
* @param {Object} columns[i].isNotNull boolean, The 'NOT NULL' constraint enforces a clumn to NOT accept NULL values | ||
* @param {Object} columns[i].options Any option, e.g., PRIMARY KEYS/ AUTOINCREMENT, and so on. | ||
* | ||
*/ | ||
async createTable(tableName, columns) { | ||
let query = ''; | ||
for (let i = 0; i < columns.length; i++) { | ||
if (i === columns.length - 1) { | ||
query += '"' + columns[i].name + '" ' + columns[i].dataType + ' ' + ((columns[i].isNotNull) ? 'NOT NULL ' : '') + ((columns[i].options) ? columns[i].options : '') | ||
} else { | ||
query += '"' + columns[i].name + '" ' + columns[i].dataType + ' ' + ((columns[i].isNotNull) ? 'NOT NULL ' : '') + ((columns[i].options) ? columns[i].options : '') + ',' | ||
} | ||
} | ||
|
||
|
||
query = 'CREATE TABLE IF NOT EXISTS ' + tableName + ' (' + query + ')'; | ||
// console.log(query); | ||
return this.executeQuery(query); | ||
// console.log(table); | ||
} | ||
|
||
/** | ||
* | ||
* @param {string} tableName Table Name | ||
* @param {Object} data Object type, the values to be inserted { [name] : [value] } | ||
* | ||
*/ | ||
async insert(tableName, data) { | ||
let keys = Object.keys(data); | ||
let values = keys.map((key) => data[key]); | ||
|
||
console.log(keys, values) | ||
|
||
let query = 'INSERT INTO ' + tableName + ' ('; | ||
for (let i = 0; i < keys.length; i++) { | ||
query += keys[i] + ','; | ||
} | ||
query = query.slice(0, query.length - 1); | ||
query += ') VALUES '; | ||
|
||
query += '('; | ||
for (let i = 0; i < values.length; i++) { | ||
query += '?,'; | ||
} | ||
query = query.slice(0, query.length - 1); | ||
query += ')'; | ||
|
||
console.log('insert :',query, values); | ||
return this.executeQuery(query, values); | ||
} | ||
|
||
/** | ||
* | ||
* @param {string} tableName Table Name | ||
* @param {Object} data Object type, the values to updated | ||
* @param {Object} where The condition of value to be updated | ||
*/ | ||
async update(tableName, data, where) { | ||
let keys = Object.keys(data); | ||
let values = keys.map((key) => data[key]); | ||
|
||
let whereKey = Object.keys(where); | ||
let whereValue = whereKey.map((key) => where[key]); | ||
|
||
let query = 'UPDATE ' + tableName + ' SET '; | ||
for (let i = 0; i < keys.length; i++) { | ||
query += keys[i] + ' = ?,'; | ||
} | ||
query = query.slice(0, query.length - 1); | ||
query += ' WHERE ' | ||
|
||
for (let i = 0; i < whereKey.length; i++) { | ||
query += whereKey[i] + ' = ?,'; | ||
} | ||
query = query.slice(0, query.length - 1); | ||
values.push(...whereValue); | ||
|
||
// console.log(query, values); | ||
return await this.executeQuery(query, values); | ||
// console.log(updateQuery); | ||
} | ||
|
||
/** | ||
* | ||
* @param {string} tableName Table Name | ||
* @param {array} columns If you want to select a specific column, input the column string array. | ||
* @param {Object} where The condition of data to be selected | ||
* @param {string} order The criteria for sorting when selecting | ||
* @returns {Array} | ||
*/ | ||
async select(tableName, columns = false, where = false, order = false) { | ||
let query = 'SELECT '; | ||
columns = (columns === false) ? '*' : columns.join(); | ||
query += columns + ' FROM ' + tableName; | ||
if (where) { | ||
let whereKey = Object.keys(where); | ||
query += ' WHERE '; | ||
for (let i = 0; i < whereKey.length; i++) { | ||
query += whereKey[i] + ' = ?,'; | ||
} | ||
query = query.slice(0, query.length - 1); | ||
query = query.replace(/,/g, ' AND '); | ||
} | ||
|
||
if (order) { | ||
query += ' ORDER BY ' + order; | ||
} | ||
|
||
let selectQuery; | ||
if (where) { | ||
let whereKey = Object.keys(where); | ||
let whereValue = whereKey.map((key) => where[key]); | ||
selectQuery = await this.executeQuery(query, whereValue); | ||
} else { | ||
// console.log(query); | ||
selectQuery = await this.executeQuery(query); | ||
// console.log(selectQuery); | ||
} | ||
|
||
let rows = selectQuery.rows; | ||
let res = []; | ||
for (let i = 0; i < rows.length; i++) { | ||
res.push(rows.item(i)); | ||
} | ||
// DEBUG | ||
// console.log(res); | ||
return res; | ||
} | ||
|
||
/** | ||
* | ||
* @param {string} tableName The table name to be droped. | ||
*/ | ||
async drop(tableName) { | ||
let query = 'DROP TABLE IF EXISTS ' + tableName; | ||
// console.log(query); | ||
await Promise(this.executeQuery(query)); | ||
} | ||
|
||
/** | ||
* | ||
* @param {string} tableName The table name | ||
* @param {Object} where The condition of the row, which is to be deleted. | ||
*/ | ||
async delete(tableName, where) { | ||
let whereKey = Object.keys(where); | ||
let whereValue = whereKey.map((key) => where[key]); | ||
let query = 'DELETE FROM ' + tableName; | ||
if (where && whereValue) { | ||
query += ' WHERE ' | ||
for (let i = 0; i < whereKey.length; i++) { | ||
query += whereKey[i] + ' = ?,'; | ||
} | ||
query = query.slice(0, query.length - 1); | ||
// console.log(query, whereValue); | ||
return this.executeQuery(query, whereValue); | ||
// console.log(deleteQuery); | ||
} else { | ||
// console.log('ERROR: delete condition is nothing'); | ||
} | ||
} | ||
} | ||
|
||
export default SQLiteManager; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
import dataModel from "./model/data"; | ||
|
||
export const DataTradeDB = new dataModel(); | ||
|
||
export const createTable = async () => { | ||
await Promise(DataTradeDB.createTable()); | ||
}; | ||
|
||
export const dropTable = async () => { | ||
await DataTradeDB.dropTable(); | ||
} | ||
|
||
export default DataTradeDB; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
import SQLiteManager from "../db"; | ||
|
||
export class dataModel extends SQLiteManager { | ||
|
||
async createTable(){ | ||
try { | ||
await super.createTable('data',[ | ||
{ | ||
name : 'idx', | ||
dataType : 'integer', | ||
isNotNull : true, | ||
options: 'PRIMARY KEY AUTOINCREMENT' | ||
}, | ||
{ | ||
name : 'owner', | ||
dataType : 'string', | ||
isNotNull : true, | ||
}, | ||
{ | ||
name : 'title', | ||
dataType : 'string', | ||
isNotNull : true | ||
}, | ||
{ | ||
name : 'data', | ||
dataType : 'string', | ||
isNotNull : true | ||
} | ||
]) | ||
} catch (error) { | ||
console.log(error); | ||
throw error; | ||
} | ||
} | ||
|
||
async insertData(data) { | ||
try { | ||
// console.log(data); | ||
await super.insert('data', data); | ||
} catch (error) { | ||
console.log(error); | ||
throw error; | ||
} | ||
} | ||
|
||
async dropTable() { | ||
try { | ||
await super.drop('data'); | ||
} | ||
catch (error) { | ||
console.error('data : ',error); | ||
throw error; | ||
} | ||
|
||
} | ||
|
||
async searchFromTitle(title){ | ||
try { | ||
console.log(title) | ||
return (await super.select('data', ['title'], {'title' : title},false)); | ||
} catch (error) { | ||
console.log(error); | ||
throw error | ||
} | ||
} | ||
} | ||
|
||
export default dataModel; |
Oops, something went wrong.