轉自:http://www.sqlite.com.cn/MySqlite/4/554.Html
SQLite 是一個非常流行的嵌入式數據庫,它提供了一個清爽的 SQL 接口,相當小的內存佔用和高速的響應,更 Happy 的是他還是免費的,大家都可以盡情的使用,很多牛叉的公司(諸如 Adobe,Apple,Google,Sun,Symbian ),開源項目( Mozilla,PHP,Python )都在產品中裝配 SQLite.
Android 中, SQLite 是被集成於 Android runtime ,每個 Android 應用程序都可以歡快的使用 SQLite 數據庫,如果你熟悉 JDBC ,那麼這個過程就更安逸了。
SQLite3 特徵
和傳統關係數據庫比較
有的:
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 org.imti;
- 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();
- }
- db.close();
- viewAll.setText(sf.toString());
- }
- }
- };
- btnAdd.setOnClickListener(listener);
- btnViewAll.setOnClickListener(listener);
- }
- }
package org.imti;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(); } db.close(); viewAll.setText(sf.toString()); } } }; btnAdd.setOnClickListener(listener); btnViewAll.setOnClickListener(listener); }}
- package org.imti;
- import android.content.Context;
- import android.database.Cursor;
- import android.database.sqlite.SQLiteDatabase;
- import android.util.Log;
- /**
- * 數據庫操作工具類
- *
- * @author [email protected]
- *
- */
- 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());
- }
- /**
- * 建表
- * 列名 區分大小寫?
- * 都有什麼數據類型?
- * 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="";
- try{
- sql="insert into t_user values(null,'"+uname+"')";
- db.execSQL(sql);
- Log.v(TAG,"insert Table t_user ok");
- return true;
- }catch(Exception e){
- 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(){
- db.close();
- }
- }