sqlite 是一個非常流行的嵌入式資料庫,它提供了一個清爽的 sql 接口,相當小的記憶體占用和高速的響應,更 happy 的是他還是免費的,大家都可以盡情的使用,很多牛叉的公司(諸如 adobe,apple,google,sun,symbian ),開源項目( mozilla,php,python )都在産品中裝配 sqlite.
android 中, sqlite 是被內建于 android runtime ,每個 android 應用程式都可以歡快的使用 sqlite 資料庫,如果你熟悉 jdbc ,那麼這個過程就更安逸了。
和傳統關系資料庫比較
有的:
sql 語句: select insert update
create drop
資料類型:
不區分大小寫
text 文本
numeric 數值
integer 整型
real 小數
none 無類型
沒有的:
foreign key 外鍵限制
right outer join 和 full outer join
alter table
動手之前,确認你的機器中已經配置好如下環境:
android 開發環境(怎麼配置問 google ,有很多)
本文檔适用環境 android1.0
1, 建庫
方式一:指令行方式(适合調試用)
可以使用 adb shell 進入裝置背景,指令行方式手動建立,步驟如下:
eclipse 中啟動模拟器之後, cmd 下輸入進入裝置 linux 控制台
d:/>adb shell
之後進入應用 data 目錄
# cd /data/data
ls 清單目錄,檢視檔案,找到你的項目目錄并進入
檢視有無 databases 目錄,如果沒有,則建立一個
# mkdir databases
cd databases 進入并建立資料庫
# sqlite3 friends.db
sqlite3 friends.db
sqlite version 3.5.9
enter ".help" for instructions
sqlite>
ctrl+d 退出 sqlite 提示符 ls 清單目錄會看到有一個檔案被建立 friends.db
他就是 sqlite 的庫檔案
# ls
ls
friends.db
方式二:編碼方式(使用更多)
android.content.context 中提供了函數 , 注: activity 是 context 的子類
openorcreatedatabase () 來建立我們的資料庫
db = context .openorcreatedatabase(
string database_name , int context. mode_private , null );
string database_name 資料庫的名字
int mode 操作模式 context.mode_private 等
cursorfactory 指針工廠 ,本例中傳入 null ,暫不用
2, 建表
指令行方式
# sqlite3
sqlite> create table widgets (id integer primary key autoincrement,name text);
3, 插入資料
指令行 增加,查詢資料
sqlite> insert into widgets values(null,'tom');
insert into widgets values(null,'tom');
sqlite> select * from widgets;
select * from widgets;
1|tom
sqlite>
api 方式
調用
package com.demo.android.dummynote.tools;
import android.r;
import android.app.activity;
import android.database.cursor;
import android.os.bundle;
import android.view.view;
import android.view.view.onclicklistener;
import android.widget.button;
import android.widget.edittext;
import android.widget.textview;
/**
* sqlite demo
*
* 供activity私有通路的資料庫 沒有使用contentprovider 方式 增加 查詢資料
* @author [email protected]
*/
public class dbdemo extends activity {
edittext inputtxt;
button btnadd;
button btnviewall;
textview viewall;
dbhelper db;
@override
protected void oncreate(bundle savedinstancestate) {
// todo auto-generated method stub
super.oncreate(savedinstancestate);
this.setcontentview(r.layout.dbdemo);
// 初始化ui
btnadd = (button) findviewbyid(r.id.btnadd);
btnviewall = (button) findviewbyid(r.id.btnviewall);
viewall = (textview) findviewbyid(r.id.viewall);
inputtxt = (edittext) findviewbyid(r.id.txtinput);
// 初始化db
db = new dbhelper(this);
// 初始化監聽
onclicklistener listener = new onclicklistener() {
public void onclick(view v) {
if (v.getid() == r.id.btnadd) {
// 增加
db.save(inputtxt.gettext().tostring());
db.close();
} else if (v.getid() == r.id.btnviewall) {
// 浏覽所有資料
cursor cur = db.loadall();
stringbuffer sf = new stringbuffer();
cur.movetofirst();
while (!cur.isafterlast()) {
sf.append(cur.getint(0)).append(" : ").append(
cur.getstring(1)).append("/n");
cur.movetonext();
}
viewall.settext(sf.tostring());
};
btnadd.setonclicklistener(listener);
btnviewall.setonclicklistener(listener);
import android.content.context;
import android.database.sqlite.sqlitedatabase;
import android.util.log;
* 資料庫操作工具類
public class dbhelper {
private static final string tag = "dbdemo_dbhelper";// 調試标簽
private static final string database_name = "dbdemo.db";// 資料庫名
sqlitedatabase db;
context context;// 應用環境上下文 activity 是其子類
dbhelper(context _context) {
context = _context;
// 開啟資料庫
db = context.openorcreatedatabase(database_name, context.mode_private,
null);
createtable();
log.v(tag, "db path=" + db.getpath());
* 建表 列名 區分大小寫? 都有什麼資料類型?<br>
* sqlite 3 text 文本 numeric 數值 integer 整型 real 小數 none 無類型 查詢可否發送select ?
public void createtable() {
try {
db.execsql("create table t_user ("
+ "_id integer primary key autoincrement," + "name text"
+ ");");
log.v(tag, "create table t_user ok");
} catch (exception e) {
log.v(tag, "create table t_user err,table exists.");
* 增加資料
* @param id
* @param uname
* @return
public boolean save(string uname) {
string sql = "";
sql = "insert into t_user values(null,'" + uname + "')";
db.execsql(sql);
log.v(tag, "insert table t_user ok");
return true;
log.v(tag, "insert table t_user err ,sql: " + sql);
return false;
* 查詢所有記錄
* @return cursor 指向結果記錄的指針,類似于jdbc 的 resultset
public cursor loadall() {
cursor cur = db.query("t_user", new string[] { "_id", "name" }, null,
null, null, null, null);
return cur;
public void close() {