1. 程式人生 > >Android-SQLite3 超基礎入門

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程式碼
  1. package  org.imti;  
  2. import  android.app.Activity;  
  3. import  android.database.Cursor;  
  4. import  android.os.Bundle;  
  5. import  android.view.View;  
  6. import  android.view.View.OnClickListener;  
  7. import  android.widget.Button;  
  8. import  android.widget.EditText;  
  9. import  android.widget.TextView;  
  10. /**  
  11.  * SQLite Demo  
  12.  *   
  13.  * 供Activity私有訪問的資料庫 沒有使用ContentProvider 方式 增加 查詢資料  
  14.  *   
  15.  * @author [email protected]  
  16.  *   
  17.  */
  18. public class  DbDemo  extends  Activity {  
  19.     EditText inputTxt;  
  20.     Button btnAdd;  
  21.     Button btnViewAll;  
  22.     TextView viewAll;  
  23.     DBHelper db;  
  24.     @Override
  25.     protected void  onCreate(Bundle savedInstanceState) {  
  26.         // TODO Auto-generated method stub
  27.         super .onCreate(savedInstanceState);  
  28.         this .setContentView(R.layout.dbdemo);  
  29.         // 初始化UI
  30.         btnAdd = (Button) findViewById(R.id.btnAdd);  
  31.         btnViewAll = (Button) findViewById(R.id.btnViewAll);  
  32.         viewAll = (TextView) findViewById(R.id.viewAll);  
  33.         inputTxt = (EditText) findViewById(R.id.txtInput);  
  34.         // 初始化DB
  35.         db = new  DBHelper( this );  
  36.         // 初始化監聽
  37.         OnClickListener listener = new  OnClickListener() {  
  38.             public void  onClick(View v) {  
  39.                 if  (v.getId() == R.id.btnAdd) {  
  40.                     // 增加
  41.                     db.save(inputTxt.getText().toString());  
  42.                                        db.close();  
  43.                 } else if  (v.getId() == R.id.btnViewAll) {  
  44.                     // 瀏覽所有資料
  45.                     Cursor cur = db.loadAll();  
  46.                     StringBuffer sf = new  StringBuffer();  
  47.                     cur.moveToFirst();  
  48.                     while  (!cur.isAfterLast()) {  
  49.                         sf.append(cur.getInt(0 )).append( " : " ).append(  
  50.                                 cur.getString(1 )).append( "/n" );  
  51.                         cur.moveToNext();  
  52.                     }  
  53.                                       db.close();  
  54.                     viewAll.setText(sf.toString());  
  55.                 }  
  56.             }  
  57.         };  
  58.         btnAdd.setOnClickListener(listener);  
  59.         btnViewAll.setOnClickListener(listener);  
  60.     }  
  61. }  
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程式碼
  1. package  org.imti;  
  2. import  android.content.Context;  
  3. import  android.database.Cursor;  
  4. import  android.database.sqlite.SQLiteDatabase;  
  5. import  android.util.Log;  
  6. /**  
  7.  * 資料庫操作工具類  
  8.  *   
  9.  * @author [email protected]  
  10.  *   
  11.  */
  12. public class  DBHelper {  
  13.     private static final  String TAG =  "DBDemo_DBHelper" ; // 除錯標籤
  14.     private static final  String DATABASE_NAME =  "dbdemo.db" ; // 資料庫名
  15.     SQLiteDatabase db;  
  16.     Context context;//應用環境上下文   Activity 是其子類
  17.     DBHelper(Context _context) {  
  18.         context = _context;  
  19.         //開啟資料庫
  20.         db = context.openOrCreateDatabase(DATABASE_NAME, Context.MODE_PRIVATE,null );  
  21.         CreateTable();  
  22.         Log.v(TAG, "db path="  + db.getPath());  
  23.     }  
  24.     /**  
  25.      * 建表  
  26.      * 列名 區分大小寫?  
  27.      * 都有什麼資料型別?  
  28.      * SQLite 3   
  29.      *  TEXT    文字  
  30.         NUMERIC 數值  
  31.         INTEGER 整型  
  32.         REAL    小數  
  33.         NONE    無型別  
  34.      * 查詢可否傳送select ?  
  35.      */
  36.     public void  CreateTable() {  
  37.         try  {  
  38.             db.execSQL("CREATE TABLE t_user ("  +  
  39.                     "_ID INTEGER PRIMARY KEY autoincrement,"
  40.                     + "NAME TEXT"
  41.                     + ");" );  
  42.             Log.v(TAG, "Create Table t_user ok" );  
  43.         } catch  (Exception e) {  
  44.             Log.v(TAG, "Create Table t_user err,table exists." );  
  45.         }  
  46.     }  
  47.     /**  
  48.      * 增加資料  
  49.      * @param id  
  50.      * @param uname  
  51.      * @return  
  52.      */
  53.     public boolean  save(String uname){  
  54.         String sql="" ;  
  55.         try {  
  56.             sql="insert into t_user values(null,'" +uname+ "')" ;  
  57.             db.execSQL(sql);  
  58.             Log.v(TAG,"insert Table t_user ok" );  
  59.             return true ;  
  60.         }catch (Exception e){  
  61.             Log.v(TAG,"insert Table t_user err ,sql: " +sql);  
  62.             return false ;  
  63.         }  
  64.     }  
  65.     /**  
  66.      * 查詢所有記錄  
  67.      *   
  68.      * @return Cursor 指向結果記錄的指標,類似於JDBC 的 ResultSet  
  69.      */
  70.     public  Cursor loadAll(){  
  71.         Cursor cur=db.query("t_user" new  String[]{ "_ID" , "NAME" },  null , null null null null );  
  72.         return  cur;  
  73.     }  
  74.       public void  close(){  
  75.         db.close();  
  76.     }  
  77. }  
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();
	}
}