1. html5本地存儲更新資料庫sql 怎麼寫
HTML5本地存儲——Web SQL Database
在HTML5 WebStorage介紹了html5本地存儲的Local Storage和Session Storage,這兩個是以鍵值對存儲的解決方案,存儲少量數據結構很有用,但是對於大量結構化數據就無能為力了,靈活大不夠強大。
Web SQL Database
我們經常在資料庫中處理大量結構化數據,html5引入Web SQL Database概念,它使用 SQL 來操縱客戶端資料庫的 API,這些 API 是非同步的,規范中使用的方言是SQLlite,悲劇正是產生於此,Web SQL Database規范頁面有著這樣的聲明
This document was on the W3C Recommendation track but specification work has stopped. The specification reached an impasse: all interested implementors have used the same SQL backend (Sqlite), but we need multiple independent implementations to proceed along a standardisation path.
大概意思就是
這個文檔曾經在W3C推薦規范上,但規范工作已經停止了。目前已經陷入了一個僵局:目前的所有實現都是基於同一個SQL後端(SQLite),但是我們需要更多的獨立實現來完成標准化。
也就是說這是一個廢棄的標准了,雖然部分瀏覽器已經實現,但。。。。。。。
三個核心方法
但是我們學一下也沒什麼壞處,而且能和現在W3C力推的IndexedDB做比較,看看為什麼要廢棄這種方案。Web SQL Database 規范中定義的三個核心方法:
openDatabase:這個方法使用現有資料庫或新建資料庫來創建資料庫對象
transaction:這個方法允許我們根據情況控制事務提交或回滾
executeSql:這個方法用於執行SQL 查詢
openDatabase
我們可以使用這樣簡單的一條語句,創建或打開一個本地的資料庫對象
var db = openDatabase('testDB', '1.0', 'Test DB', 2 * 1024 * 1024);
openDatabase接收五個參數:
資料庫名字
資料庫版本號
顯示名字
資料庫保存數據的大小(以位元組為單位 )
回調函數(非必須)
如果提供了回調函數,回調函數用以調用 changeVersion() 函數,不管給定什麼樣的版本號,回調函數將把資料庫的版本號設置為空。如果沒有提供回調函數,則以給定的版本號創建資料庫。
transaction
transaction方法用以處理事務,當一條語句執行失敗的時候,整個事務回滾。方法有三個參數
包含事務內容的一個方法
執行成功回調函數(可選)
執行失敗回調函數(可選)
db.transaction(function (context) {
context.executeSql('CREATE TABLE IF NOT EXISTS testTable (id unique, name)');
context.executeSql('INSERT INTO testTable (id, name) VALUES (0, "Byron")');
context.executeSql('INSERT INTO testTable (id, name) VALUES (1, "Casper")');
context.executeSql('INSERT INTO testTable (id, name) VALUES (2, "Frank")');
});
這個例子中我們創建了一個table,並在表中插入三條數據,四條執行語句任何一條出現錯誤,整個事務都會回滾
executeSql
executeSql方法用以執行SQL語句,返回結果,方法有四個參數
查詢字元串
用以替換查詢字元串中問號的參數
執行成功回調函數(可選)
執行失敗回調函數(可選)
在上面的例子中我們使用了插入語句,看個查詢的例子
db.transaction(function (context) {
context.executeSql('SELECT * FROM testTable', [], function (context, results) {
var len = results.rows.length, i;
console.log('Got '+len+' rows.');
for (i = 0; i < len; i++){
console.log('id: '+results.rows.item(i).id);
console.log('name: '+results.rows.item(i).name);
}
});
完整示例
<!DOCTYPE HTML>
<html>
<head>
<title>Web SQL Database</title>
</head>
<body>
<script type="text/javascript">
var db = openDatabase('testDB', '1.0', 'Test DB', 2 * 1024 * 1024);
var msg;
db.transaction(function (context) {
context.executeSql('CREATE TABLE IF NOT EXISTS testTable (id unique, name)');
context.executeSql('INSERT INTO testTable (id, name) VALUES (0, "Byron")');
context.executeSql('INSERT INTO testTable (id, name) VALUES (1, "Casper")');
context.executeSql('INSERT INTO testTable (id, name) VALUES (2, "Frank")');
});
db.transaction(function (context) {
context.executeSql('SELECT * FROM testTable', [], function (context, results) {
var len = results.rows.length, i;
console.log('Got '+len+' rows.');
for (i = 0; i < len; i++){
console.log('id: '+results.rows.item(i).id);
console.log('name: '+results.rows.item(i).name);
}
});
});
</script>
</body>
</html>
最後
由於Web SQL Database規范已經被廢棄,原因說的很清楚,當前的SQL規范採用SQLite的SQL方言,而作為一個標准,這是不可接受的,每個瀏覽器都有自己的實現這還搞毛的標准。這樣瀏覽器兼容性就不重要了,估計慢慢會被遺忘。不過Chrome的控制台真心好用啊,神馬cookie、Local Storage、Session Storage、Web SQL、IndexedDB、Application Cache等html5新增內容看的一清二楚,免去了很多調試代碼工作。
2. 怎樣使用HTML5中的Web SQL DataBase本地資料庫增刪改查
首先來看看怎樣創建資料庫:
1、創建資料庫
var db = window.openDatabase("mydata", "1.0","資料庫描述",20000);
//window.openDatabase("資料庫名字", "版本","資料庫描述",資料庫大小);
if(db)
alert("新建資料庫成功!");
2、怎樣連接資料庫
db.transaction(function(tx) {
tx.executeSql("CREATE TABLE test (id int UNIQUE, mytitle TEXT, timestamp REAL)");
});
上面是新建數據表!本地資料庫是通過db.transaction()函數來實現的,再看下面的代碼吧!
插入記錄:
db.transaction(function(tx) {
tx.executeSql("INSERT INTO test (mytitle, timestamp) values(?, ?)", ["WEB Database", new Date().getTime()], null, null);
});
更新記錄:
db.transaction(function(tx) {
tx.executeSql("update test set mytitle=? where mytitle = 'fsafdsaf'",['xp'],null,null);
});
查詢記錄:
db.transaction(function(tx) {
tx.executeSql("SELECT * FROM test", [],
function(tx, result) {
for(var i = 0; i < result.rows.length; i++){
document.write('<b>' + result.rows.item(i)['mytitle'] + '</b><br />');
}
}, function(){
alert("error");
});
});
刪除表:
db.transaction(function(tx) {
tx.executeSql("DROP TABLE test");
})
3. 網站製作 靜態的HTML文件已經做好了,怎麼連接資料庫
access資料庫一般用ASP,下面是示例代碼:
asp連接access資料庫應用下面代碼
<%
set conn=Server.CreateObject("ADODB.Connection")
DBPath = Server.MapPath("board.mdb") 'Server.MapPath("board.mdb") 獲得資料庫文件board.mdb的絕對路徑
conn.Open "provider=microsoft.jet.oledb.4.0;data source="&dbpath
%>
首先在board.mdb資料庫里建立一張數據表board(id,title,content,subtime)個欄位數據類型自己思考,環境都建好了,下面我們就開始程序設計,無論網頁還是程序我建議用dw來做吧,我就是用它的
本例中涉及到的文件有
conn.asp資料庫鏈接文件
send.asp,發表留言界面頁
sendok.asp,留言錄庫操作程序文件
board.asp留言讀庫顯示頁面
文件的內容鋒謹扒附件里有源文件大家可以下載察看
首先介紹asp一個很有效的特性就是伺服器端包含
<!--#i nclude file="conn.asp"-->
其中conn.asp就是被包含的文件,此包含可以出現在文件的任意位置
被包含的文件內容將完全被解釋成包含文件的內容,,重復的代碼也會大大降低。
conn.asp內容
<%
set conn=Server.CreateObject("ADODB.Connection")
DBPath = Server.MapPath("board.mdb")
conn.Open "provider=microsoft.jet.oledb.4.0;data source="&dbpath
%>
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
send.asp內容
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; ch***t=gb2312">
<title>無標題文檔</title>
<style type="text/css">
<!--
.style1 {font-size: 18px}
-->
</style>
</head>
<body>
<table width="700" border="0" align="center">
<form name="form1" method="post" action="sendok.asp">
<tr>
<td><div align="center" class="style1">發布留言</div></td>
</tr>
<tr>
<td align="center">標題:
<input name="title" type="text" size="50"></td>
</tr>
<tr>
<td align="center">內容:
<textarea name="content" cols="50"></textarea></td>
</tr>
<tr>
<td align="center"><input type="submit" name="Submit" value="提交"></td>
</tr>
</form>
</table>
</body>
</html>
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''晌中'''''''''''''''''''''''''''''''''''
sendok.asp內容
<!--#i nclude file="conn.asp"-->
<%
title=request.form("title")
content=request.form("content")
subtime=now()
conn.execute("insert into board (title,content,subtime) values('"&title&"','"&content&"','"&subtime&"')")
%>
<script>
alert("留言成功!");
location.href="/board.asp";
</script>
'''銀昌''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
board.asp內容
<!--#i nclude file="conn.asp"-->
<style type="text/css">
<!--
.style2 {
font-size: 16px;
font-weight: bold;
}
-->
</style>
<table width="300" border="0" align="center">
<tr>
<td align="center"><span class="style2">留言板查看</span></td>
</tr>
</table>
<br>
<br>
<table width="200" border="0" align="center">
<tr>
<td align="center"><a href="/send.asp">發表留言</a></td>
</tr>
</table>
<br>
<br>
<%
set rs=conn.execute("select * from board order by id desc")
do while not rs.eof
%>
<table width="600" border="0" align="center" cellspacing="1" bgcolor="#999999">
<tr bgcolor="#FFFFFF">
<td width="447"><%=rs("title")%></td>
<td width="146"><%=rs("subtime")%></td>
</tr>
<tr bgcolor="#FFFFFF">
<td colspan="2"><%=rs("content")%></td>
</tr>
<tr bgcolor="#FFFFFF">
<td colspan="2"> </td>
</tr>
</table>
<%
rs.movenext
loop
rs.close
set rs=nothing
conn.close
set conn=nothing
%>