廣告

2014年11月28日 星期五

[Android][SQLite]

SQLite 資料庫雖然是一個小型資料庫,不過它跟一般大型資料庫的架構與用法也差不多,同樣可以使用SQL 執行需要的工作



建立資料庫的表格使用SQL 的「CREATE TABLE」指令
指令中需要指定表格的名稱,還有這個表格用來儲存每一筆資料中的欄位(Column)。這些需要的表格欄位可以對應到主要類別中的欄位變數,不過SQLite 資料庫基本的資料型態只有下面這幾種,使用它們來決定表格欄位可以儲存的資料型態:
  • INTEGER – 整數,對應Java 的byte、short、int 和long。
  • REAL – 小數,對應Java 的float 和double。
  • TEXT – 字串,對應Java 的String。

範例:

package com.fengjian.test;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class SQLitehomedata extends SQLiteOpenHelper {
 String tablename;
 
 //String dbname="dbCustomers";
     Context iv_context = null;
  
     public SQLitehomedata(Context p_context,String s,String e) {
         super(p_context, e, null, 1);
         //e = dbName
         //s = tableName
         iv_context = p_context;
         tablename=s;
     }
    
     public void onCreate(SQLiteDatabase p_db) {
        
     
      String l_str="CREATE TABLE "+tablename+"(";
         l_str+=" _id INTEGER PRIMARY KEY ,";
         l_str+=" fId   TEXT NOT NULL,";//pmane
         l_str+=" fcont TEXT NOT NULL,";
         l_str+=" ftime TEXT NOT NULL,";
         l_str+=" fist_in_orNot TEXT NOT NULL,";//use to record is first in or not , 0 is first , other not
         l_str+=" image TEXT NOT NULL)";//5
        
         p_db.execSQL(l_str);
      
     }

     public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {

     }
        
     //============insert,update,delete,getAll================
    
     public long insert(String p_strTableName, ContentValues p_values){
         return getWritableDatabase().insert(p_strTableName,null,p_values);
     }
     public long update(String p_strTableName, ContentValues p_values, String p_strId){
         return getWritableDatabase().update(p_strTableName, p_values, 
             "fId = '"+p_strId+"'", null);
     }
     
     public long update2(String p_strTableName, ContentValues p_values, String p_strId){
         return getWritableDatabase().update(p_strTableName, p_values, 
             "fcont = '"+p_strId+"'", null);
     }
     public long update3(String p_strTableName, ContentValues p_values, String p_strId){
         return getWritableDatabase().update(p_strTableName, p_values, 
             "ftime = '"+p_strId+"'", null);
     }
     public long deleteTime(String p_strTableName,String p_strId){
         return getWritableDatabase().delete(
            p_strTableName, "ftime = '"+p_strId+"'", null);
     }
     public long delete(String p_strTableName,String p_strId){
         return getWritableDatabase().delete(
            p_strTableName, "fId = '"+p_strId+"'", null);

     }
    
     public Cursor getAllContacts(String p_strTableName){
         return getWritableDatabase().query( p_strTableName, new String[]{"_id","fId","fcont","ftime","fist_in_orNot","image"},null, null, null, null,null);
     }
        
}


下列為使用範例,把sql語法都寫在function裡面,呼叫時就只需要傳入要刪除的欄位值,
使用完db時都要記得close()


 SQLitehomedata l_manager = new SQLitehomedata(this,"homepage","homepage");

 ContentValues l_values = new ContentValues();
 l_values.put("fId",  "");
 l_values.put("fcont","111");
 l_values.put("ftime","time");
 l_values.put("fist_in_orNot", "time"));
 l_values.put("image", "image"));
 
 
 l_manager.insert("homepage", l_values);
 
 
 //delete
 l_manager.deleteTime("homepage", "time");  

 l_manager.close();

沒有留言:

張貼留言