Android-SQLite3 超基礎入門
Android-SQLite3 超基礎入門
背景
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 方式
Java程式碼- 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);
}
}
Java程式碼
- 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();
- }
- }
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();
}
}