Web SQL Database 실행 순서
1. 데이터베이스를 연다.
var db = openDatabase("vizooo_db", "1", "비주 데이터베이스", 1024 * 1024);
openDatabase(name, version, displayName, estimatedSize, creationCallback);
name - 데이터베이스 이름. 지정한 이름이 없을 땐 새로 생성
version - 데이터베이스의 버전 문자열. 공백 문자를 지정하면 버전에 관계없이 데이터베이스를 열림
displayName - 사용자에 표시될 데이터베이스 이름
estimatedSize - 데이터베이스 크기. 바이트(Bite) 단위, 브라우저에 따라 달라질 수 있음
creationCallback - 처리가 완료되었을 때 호출할 콜백함수. 생략할 수 있음
2. 트랜잭션을 시작한다.
var db = openDatabase("vizooo_db", "1", "비주 데이터베이스", 1024 * 1024);
db.transaction(function(tx) {
// SQL 처리
},
function(error) {
// 에러처리
},
function() {
// 트랜잭션 성공 시 처리
});
transaction(callback, errorCallback, successCallback);
callback - 트랜잭션 안에서 처리를 지정하기 위한 함수
errorCallback - 트랜잭션이 에러로 종료되었을 때 호출되는 함수 생략할 수 있음
successCallback - 트랜잭션이 정상적으로 종료되었을 때 호출되는 함수 생략할 수 있음
3. 트랜잭션 안에서 SQL을 실행한다.
var db = openDatabase("vizooo_db", "1", "비주 데이터베이스", 1024 * 1024);
db.transaction(function(tx) {
tx.executeSql("INSERT INTO member (id, password) VALUES (?, ?) ",
["painone7", "1111"],
function() {
alert("SQL 문 실행 성공!");
},
function() {
alert("SQL 문 실행 실패!");
});
});
executeSql(sql, args, callback, errorCallback);
sql - SQL 문자열. SQL 문 안에 "?" 문자를 넣어 args에 지정한 값을 치환할수 있음
args - SQL 문 안에 "?" 치환할 배열."?" 순서대로 나열한 배열을 지정 생략할 수 있음
callback - SQL 문이 성공 시 처리할 함수 생략할 수 있음
errorCallback - SQL이 에러로 종료 되었을때 처리할 함수 생략할 수 있음
SQL 실행 결과 처리
insertId - INSERT 문의 결과 자동으로 생성된 ID. AUTOINCREMENT 지정 된 값
rowsAffected - UPDATE, DELETE 문으로 영향을 받은 행수
rows - SELECT 문을 실행한 결과 열
SELECT
var db = openDatabase("vizooo_db", "", "비주 데이터베이스", 1024 * 1024);
db.transaction(function(tx) {
tx.executeSql("SELECT * FROM member",
[],
// tx = 트랜잭션, rs = SQLResultSet
function(tx, rs) {
for(var i = 0; I < rs.rows.length; i++ ) {
// 행에 객체를 얻음
var row = rs.rows[i];
alert("아이디 : " + row.id + "비밀번호 : " + row.password);
}
});
});
INSERT
var db = openDatabase("vizooo_db", "", "비주 데이터베이스", 1024 * 1024);
db.transaction(function(tx) {
tx.executeSql("INSERT INTO member (id, password) VALUES (?, ?) ",
["painone7", "1111"],
function(tx, rs) {
// AUTOINCREMENT 지정 된 값
alert(ts.insertId);
});
});
UPDATE, DELETE
var db = openDatabase("vizooo_db", "", "비주 데이터베이스", 1024 * 1024);
db.transaction(function(tx) {
tx.executeSql("DELETE FROM member",
[],
function(tx, rs) {
// 영향을 받은 행수
alert(ts.rowsAffected);
});
});
Web SQL Database 예제
// 데이타베이스를 연다.(데이타베이스가 존재하지 않을 경우 새로 만든다.)
var db = openDatabase("TestDb", "", "Test Database", 1024 * 1024);
// 트랜잭션을 연다.
db.transaction(function(tx) {
// SQL문을 실행 시킨다.
tx.executeSql("CREATE TABLE IF NOT EXISTS TestTable (no integer primary key autoincrement, title, content, password, index(title))");
});
/**
* INSERT 문 실행
*/
function Insert() {
var title = document.getElementById("title").value;
var content = document.getElementById("content").value;
var password= document.getElementById("password").value;
db.transaction(function(tx) {
tx.executeSql("INSERT INTO TestTable (title, content, password) VALUES (?, ?, ?)",
[title, content, password],
function(tx, ts) {
document.getElementById("title").value = "";
document.getElementById("content").value = "";
document.getElementById("password").value = "";
Select();
},
function(tx, ts) {
alert("저장 실패");
});
});
}
/**
* SELECT 문 실행
*/
function Select() {
db.transaction(function(tx) {
tx.executeSql("SELECT * FROM TestTable ORDER BY no DESC",
[],
function(tx, rs) {
var list = document.getElementById("list");
list.innerHTML = "";
var rows = rs.rows;
for(var i = 0; i < rows.length; i++) {
var row = rows.item(i);
list.innerHTML += '<div><span onclick="FormChange(\''+ row.no +'\', \''+ row.title +'\', \''+ row.content +'\')" style="cursor:pointer;">' +
row.no + ' ' + row.title + ' ' + row.content +
'</span><input type="button" value="삭제" onclick="Delete(\''+ row.no +'\')"></div>';
}
});
});
}
/**
* UPDATE 문 실행
*/
function Update(no, title, content, password) {
db.transaction(function(tx) {
tx.executeSql("UPDATE TestTable SET title = ?, content = ?, password = ? WHERE no = ?",
[title, content, password, no],
function(tx, ts) {
document.getElementById("title").value = "";
document.getElementById("content").value = "";
document.getElementById("password").value = "";
var insert = document.getElementById("insert");
insert.style.display= "block";
var update = document.getElementById("update");
update.style.display= "none";
var cancel = document.getElementById("cancel");
cancel.style.display= "none";
Select();
},
function(tx, ts) {
alert("저장 실패");
});
});
}
/**
* DELETE 문 실행
*/
function Delete(no) {
var no = no;
db.transaction(function(tx) {
tx.executeSql("DELETE FROM TestTable WHERE no = ?",
[no],
function() {
Select();
});
});
}
function FormChange(no, title, content) {
document.getElementById("title").value = title;
document.getElementById("content").value= content;
var insert = document.getElementById("insert");
insert.style.display= "none";
var update = document.getElementById("update");
update.style.display= "block";
update.onclick = function() {
var title = document.getElementById("title").value;
var content = document.getElementById("content").value;
var password= document.getElementById("password").value;
Update(no, title, content, password);
};
var cancel = document.getElementById("cancel");
cancel.style.display= "block";
cancel.onclick = function() {
document.getElementById("title").value = "";
document.getElementById("content").value = "";
document.getElementById("password").value = "";
var insert = document.getElementById("insert");
insert.style.display= "block";
var update = document.getElementById("update");
update.style.display= "none";
var cancel = document.getElementById("cancel");
cancel.style.display= "none";
};
}
window.onload = Select();
<h1>Web SQL Database</h1>
<div>제목 : <input id="title" type="text" style="width:300px;"></div>
<div>내용 : <textarea id="content" style="width:300px;height:100px;"></textarea></div>
<div>비밀번호 : <input id="password" type="password"></div>
<div>
<input id="insert" type="button" value="작성" onclick="Insert()">
<input id="update" type="button" value="수정" style="display:none;">
<input id="cancel" type="button" value="취소" style="display:none;">
</div>
<h3>리스트 출력</h3>
<div id="list"></div>
'Language > html5' 카테고리의 다른 글
Server-Sent Events (0) | 2010.08.04 |
---|---|
Web Workers (0) | 2010.07.24 |
Web Storage (세션 스토리지) (0) | 2010.07.16 |
Web Storage (로컬 스토리지) (0) | 2010.07.16 |
선과 채우기의 색상 지정하기 (0) | 2010.06.03 |