HTML5的Web SQL Databases(html5 本地資料庫)的確很誘惑人,當你發現可以用與mysql查詢一樣的查詢語句來操作本地資料庫時,你會發現這東西挺有趣的。今天,我們一起來了解HTML 5的Web SQL Database API:openDatabase、transaction、executeSql。
Web SQL資料庫API實際上不是HTML5規范的組成部分,而是單獨的規范。它通過一套API來操縱客戶端的資料庫。Safari、Chrome、Firefox、Opera等主流瀏覽器都已經支持Web SQL Database。HTML5的Web SQL Databases的確很誘惑人,當你發現可以用與mysql查詢一樣的查詢語句來操作本地資料庫時,你會發現這東西挺有趣的。今天,我們一起來了解HTML 5的Web SQL Database API。
下面將一一將介紹怎樣創建打開資料庫,創建表,添加數據,更新數據,刪除數據,刪除表 。
先介紹三個核心方法
1、openDatabase:這個方法使用現有資料庫或創建新資料庫創建資料庫對象。
2、transaction:這個方法允許我們根據情況控制事務提交或回滾。
3、executeSql:這個方法用於執行真實的SQL查詢。
第一步:打開連接並創建資料庫
代碼如下:
var dataBase = openDatabase("student", "1.0", "學生表", 1024 * 1024, function () { });
if (!dataBase) {
alert("資料庫創建失敗!");
} else {
alert("資料庫創建成功!");
}
解釋一下openDatabase方法打開一個已經存在的資料庫,如果資料庫不存在,它還可以創建資料庫。幾個參數意義分別是:
1,資料庫名稱。
2,版本號 目前為1.0,不管他,寫死就OK。
3,對資料庫的描述。
4,設置數據的大小。
5,回調函數(可省略)。
初次調用時創建資料庫,以後就是建立連接了。
創建的資料庫就存在本地,路徑如下:
C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default\databases\http_localhost_4987 。
創建的是一個sqllite資料庫,可以用SQLiteSpy打開文件,可以看到裡面的數據。SQLiteSpy是一個綠色軟體,可以網路一下下載地址或SQLiteSpy官方下載:SQLiteSpy。
第二步:創建數據表
代碼如下:
this.createTable=function() {
dataBase.transaction( function(tx) {
tx.executeSql(
"create table if not exists stu (id REAL UNIQUE, name TEXT)",
[],
function(tx,result){ alert('創建stu表成功'); },
function(tx, error){ alert('創建stu表失敗:' + error.message);
});
});
}
解釋一下,
executeSql函數有四個參數,其意義分別是:
1)表示查詢的字元串,使用的SQL語言是SQLite 3.6.19。
2)插入到查詢中問號所在處的字元串數據。
3)成功時執行的回調函數。返回兩個參數:tx和執行的結果。
4)一個失敗時執行的回調函數。返回兩個參數:tx和失敗的錯誤信息。
第三步:執行增刪改查
1)添加數據:
代碼如下:
this.insert = function () {
dataBase.transaction(function (tx) {
tx.executeSql(
"insert into stu (id, name) values(?, ?)",
[id, '徐明祥'],
function () { alert('添加數據成功'); },
function (tx, error) { alert('添加數據失敗: ' + error.message);
} );
});
2)查詢數據
代碼如下:
this.query = function () {
dataBase.transaction(function (tx) {
tx.executeSql(
"select * from stu", [],
function (tx, result) { //執行成功的回調函數
//在這里對result 做你想要做的事情吧...........
},
function (tx, error) {
alert('查詢失敗: ' + error.message);
} );
});
}
解釋一下
上面代碼中執行成功的回調函數有一參數result。
result:查詢出來的數據集。其數據類型為 SQLResultSet ,就如同C#中的DataTable。
SQLResultSet 的定義為:
代碼如下:
interface SQLResultSet {
readonly attribute long insertId;
readonly attribute long rowsAffected;
readonly attribute SQLResultSetRowList rows;
};
其中最重要的屬性—SQLResultSetRowList 類型的 rows 是數據集的「行」 。
rows 有兩個屬性:length、item 。
故,獲取查詢結果的某一行某一列的值 :result.rows[i].item[fieldname] 。
3)更新數據
代碼如下:
this.update = function (id, name) {
dataBase.transaction(function (tx) {
tx.executeSql(
"update stu set name = ? where id= ?",
[name, id],
function (tx, result) {
},
function (tx, error) {
alert('更新失敗: ' + error.message);
});
});
}
4)刪除數據
代碼如下:
this.del = function (id) {
dataBase.transaction(function (tx) {
tx.executeSql(
"delete from stu where id= ?",
[id],
function (tx, result) {
},
function (tx, error) {
alert('刪除失敗: ' + error.message);
});
});
}
5)刪除數據表
代碼如下:
this.dropTable = function () {
dataBase.transaction(function (tx) {
tx.executeSql('drop table stu');
});
}
Ⅱ SQL 用多個聚合函數匯總查詢結果
SELECT DISTINCT
'計劃號'=A.BAT_NO,'訂單貨品名稱'=C.NAME,
'種類總數'=COUNT(DISTINCT A.MO_NO),
'件數總數'=SUM(A.QTY),
'工時總數'=SUM(B.USED_TIME),
'完成件數'=SUM(DISTINCT A.QTY) ,
'完成種數'=COUNT(DISTINCT A.MO_NO) ,
'完成工時'=SUM(DISTINCT B.USED_TIME)
FROM MF_MO A LEFT JOIN MF_TZ B ON A.MO_NO=B.MO_NO
LEFT JOIN PRDT C ON A.MRP_NO_SO=C.PRD_NO
WHERE BIL_MAK='T' and A.CLOSE_ID='T' and B.CLOSE_ID='T'
GROUP BY A.BAT_NO,C.NAME
ORDER BY A.BAT_NO,C.NAME
看這樣是你想要的結果嗎?
Ⅲ sql 查詢同一欄位 相同條件多次出現
select * from 表 where 查詢欄位 like 『%G%』 and 查詢欄位 not like 『%GZ%』
這個查詢是只包含G而不包括GZ 的。
select * from 表 where 查詢欄位 like 『%GZ%』 這個查詢就是同時包含 gz和g 。只有查詢出包含GZ的那麼這里就一定包含G。所以同時包含 gz和g。
Ⅳ SQL如何查詢出某一列中不同值出現的次數
1、首先需要創建一個臨時表,用於演示如何篩選出表中指定欄位值重復的記錄數量。
2、往臨時表中插入幾行測試數據,其中部分欄位的Col2欄位值插入相同值,用於統計篩選相同Col2的行數。
3、查詢臨時表中的測試數據。
4、使用distinct可以篩選出Col2列的不同值的記錄。
5、使用count(1)加上groupby計算出Col2不重復值的記錄行數。
6、使用having過濾出Col2列的行數大於1的值以及行數。
7、使用having過濾出Col2列的行數大於1的值以及行數,在按照行數倒序排列。