天天看點

Android-SQLite3 超基礎入門

       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() {