sqlite的簡單使用


sqlite的簡單使用,從入門到....自暴自棄..

uniapp sqlite模塊用於操作本地數據庫文件,可實現數據庫文件的創建,執行SQL語句等功能.
注意:HBuilderX1.7.2及以上版本支持此功能。

在此之前需要了解什么是plus?

以plus開頭的方法都是屬於HTML5+環境調用的方法。

plus不能在瀏覽器環境下使用,它必須在手機APP上才能使用,因為以安卓為例,他是操縱webview的API。在5+中,我們在使用plus之前要監聽HTML5+環境是否已經加載完畢,而在uniapp中,則可以直接調用,可以參看uni-app使用plus注意事項。

什么是webview?

WebView是android中一個非常重要的控件,它的作用是用來展示一個web頁面。它使用的內核是webkit引擎,4.4版本之后,直接使用chrome作為內置網頁瀏覽器。它的作用是顯示和渲染頁面,可與頁面JavaScript加護,實現混合開發。

uniapp打包App 端內置 HTML5+ 引擎

sqlite使用

sqlite方法: 參考文檔: https://www.html5plus.org/doc/zh_cn/sqlite.html#plus.sqlite.executeSql
openDatabase: 打開數據庫
isOpenDatabase: 判斷數據庫是否打開
closeDatabase: 關閉數據庫

transaction: 執行事務

executeSql: 執行增刪改等操作的SQL語句
selectSql: 執行查詢的SQL語句

方法的前綴 plus.sqlite 表示 plus的sqlite的方法

  1. openDatabase,isOpenDatabase,closeDatabase
//如果數據庫存在則打開,不存在則創建。
plus.sqlite.openDatabase({
    name: 'first',  // ( String ) 必選 數據庫名稱
    path: '_doc/test.db',  // ( String ) 必選 數據庫路徑
    success: function(e){
    	console.log('openDatabase success!');
    },
    fail: function(e){
    	console.log('openDatabase failed: '+JSON.stringify(e));
    }
});
//數據庫已經打開則返回true,數據庫沒有打開則返回false。 HBuilderX1.9.0及以上版本支持。
plus.sqlite.isOpenDatabase({
    name: 'first',  // ( String ) 必選 數據庫名稱
    path: '_doc/test.db',  // ( String ) 必選 數據庫路徑
    success: function(e){
    	console.log('openDatabase success!');
       //返回值 Boolean : true表示數據庫已打開,false表示數據庫沒有打開。
    },
    fail: function(e){
    	console.log('openDatabase failed: '+JSON.stringify(e));
    }
});
//完成數據庫操作后,必須關閉數據庫,否則可能會導致系統資源無法釋放。
plus.sqlite.closeDatabase({
    name: 'first',
    success: function(e){
        console.log('closeDatabase success!');
    },
    fail: function(e){
        console.log('closeDatabase failed: '+JSON.stringify(e));
    }
});

2.transaction

plus.sqlite.transaction({
    name: 'first',
    operation: 'begin', //可選值:begin(開始事務)、commit(提交)、rollback(回滾)。
    success: function(e){
    	console.log('transaction success!');
    },
    fail: function(e){
    	console.log('transaction failed: '+JSON.stringify(e));
    }
});
  1. executeSql,selectSql
plus.sqlite.executeSql({
    name: 'first', //name: ( String ) 必選 數據庫名稱
    sql: "sql", //sql: ( Array[String] | String ) 必選 需要執行的SQL語句
    //參數為字符串時,表示執行單條SQL語句; 參數為字符串數組時(HBuilderX2.5.5+支持),表示執行多條SQL語句,按數組順序執行,某條SQL語句執行錯誤則終止。 注意:Android平台不支持SQL語句中使用“;”分割多條命令,要運行多條命令請使用字符串數組參數。
    success: function(e){
    	console.log('executeSql success!');
    },
    fail: function(e){
    	console.log('executeSql failed: '+JSON.stringify(e));
    }
});

sql 的簡單使用語法

創建刪除

創建 create table

create table if not exists imglocation(key1,key2,key3) //創建一個imglocation表名的表,有的話鏈接 沒有的話創建 表結構為key1,key2,key3

刪除表

DROP TABLE 表名;   //直接刪除表結構
增刪改查

插入insert

"insert into mixtureinfo (ciid,miid) VALUES('"mixtureList[i].ciid+"','"+mixtureList[i].miid+"')";

insert into 表名(字段key1,字段key2)VALUES (字段key1值,字段key1值)
也可 : insert into 表名 VALUES (字段key1值,字段key1值)
注意 每個值要用引號 引起來

刪除表內容 DELETE

DELETE FROM 表名;   //刪除表內容 不刪除表結構
//后可接 條件語句 刪除指定數據
//如:
`DELETE FROM mixtureinfoss where meter_book_id = '${id}'`

修改UPDATE update

var sqlInfo =
   `read_status='2',read_source='2',read_end_code='${this.waterList.read_end_code - 0}',read_waters='${this.sum}',read_adj_waters='0',read_settle_waters='${this.sum}',read_situation='${this.waterList.read_situation}',read_memo='${this.waterList.read_memo}'`
var sql = `UPDATE mixtureinfoss SET ${sqlInfo} WHERE id = '${this.waterList.id}' `

UPDATE 表名 SET 要修改的數據key1=data1 鍵與值一一對應 //在沒有使用條件語句時  修改的是整個表
注意:修改時 一定要加條件語句

查詢 select

//所有
select * from mixtureinfo   // 查詢 from表名 所有字段
select 返回字段key form 表名 where 查詢條件   //返回所有的話 就用


`select * from mixtureinfoss where meter_book_id='${this.fromInfo.data.meter_book_id}' AND read_status in(${read_status}) AND meter_code LIKE '%${this.fromInfo.data.fulltext}%' limit ${ this.fromInfo.pageSize } offset ${ (this.fromInfo.currentPage - 1)*this.fromInfo.pageSize}`

條件語句 where

一般where 后接的是篩選條件,對前面的結果進行篩選 執行順序按照代碼順序

AND 並且 滿足前面條件也滿足后面條件    取的是交集
OR  或   滿足前面條件或滿足后面條件都行 取的是並集
limit  10  offset  0  //從0索引開始 10條數據  limit 返回的條數(number) offset 符合條件的數據的索引(0) 


sql語法參考文檔: https://www.runoob.com/w3cnote/sql-syntax-manual.html

SQLite語法參考文檔: https://www.runoob.com/sqlite/sqlite-drop-table.html

sql進階語法參考文檔:http://c.biancheng.net/view/7389.html


封裝SQLite操作的工具函數

//日志開關
var logFlag = true;
/**
 * 全局的日志方法
 * @param {Object} message
 */
export function logUtils(message) {
	if (logFlag) {
		console.log(message);
	}
}
/**
 * 判斷數據庫是否打開
 */
function sqliteIsOpen() {
	return plus.sqlite.isOpenDatabase({
		name: 'readmachine',
		path: '_doc/readmachine.db'
	});
}

/**
 * 打開數據庫
 */
function openDB() {
	if (!sqliteIsOpen()) {
		plus.sqlite.openDatabase({
			name: 'readmachine',
			path: '_doc/readmachine.db',
			success: function(e) {
				logUtils('openDatabase success! 數據庫初始化成功');
			},
			fail: function(e) {
				logUtils('openDatabase failed: ' + JSON.stringify(e));
			}
		})
	}else{
		logUtils('openDatabase! 數據庫已初始化');
	}
}

/**
 * 關閉數據庫
 */
function colseDB() {
	if (sqliteIsOpen()) {
		plus.sqlite.closeDatabase({
			name: 'readmachine',
			success: function(e) {
				logUtils('closeDatabase success!');
			},
			fail: function(e) {
				logUtils('closeDatabase failed: ' + JSON.stringify(e));
			}
		})
	}
}
//執行數據庫
function executeSQL(exsql) {
	if (!sqliteIsOpen()) {
		openDB();
	}
	return new Promise((resolve, reject) => {
		plus.sqlite.executeSql({
			name: 'readmachine',
			sql: exsql,
			success: function(e) {
				resolve("操作成功");
				logUtils('executeSql success!');
				// console.log('executeSql success!');
			},
			fail: function(e) {
				reject(JSON.stringify(e));
			}
		});
	});
}



//查詢數據庫
function selectSQL(sql) {
	if (!sqliteIsOpen()) {
		openDB()
	};
	return new Promise((resolve, reject) => {
		try {
			plus.sqlite.selectSql({
				name: 'readmachine',
				sql: sql,
				success: function(data) {
					resolve(data);
					logUtils('查詢成功:' + data.length + "條");
				},
				fail: function(e) {
					reject(e);
					logUtils('selectSql failed: ' + JSON.stringify(e));
				}
			});
		} catch (e) {
			resolve([e])
		}
	});
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM