後宮電影院

關於部落格
後宮電影院
  • 263

    累積人氣

  • 0

    今日人氣

    0

    訂閱人氣

Android教學之使用SQLite資料庫

文章來源~
http租屋網://blog.tonycube.com/2011/11/androidsqlite.html
SQLite簡介之前介紹的資料儲存方式之結婚一是使用Preference來做少量資料的儲存,Preference採用Key-Value的方式來儲存,取資料的時候必須以Key去取得,若資料量大時,並不適合,這時候可以使用關聯式資料庫來做大量結構化資料的儲存。
SQLite是個輕量化的關聯式資料庫,它輕薄短小,無須設定或管理,沒有伺服器及組態檔,不需要資料庫管理員,它只是一個檔案,可以依須求四處移動,對移動裝置來說是非常好用的資料庫室內設計。Android把SQLite資料庫儲存在 /data/data/packagename/databases 目錄中,可以使用指令adb或ADT中的FileExplorer視圖來查看。

資料庫在Android中的位置

當你的App建立時,若沒有使用到資料庫,在/data/data/packagename目信用貸款錄中並不會有databases目錄,如下圖:
當你開始使用資料庫後,資料庫目錄及檔案就會被建立,如結婚下圖:

SQLite使用重點

這裡假設你已經有使用SQL語法及資料庫管理的經驗,這裡只說明在Android中使用SQLite的注意事項。當你在建立資料表時,通常第一個資料欄位會命名為_id,並指定為主鍵港式飲茶,而且使用AUTOINCREMENT自動遞增1。這部份我在測試的時候,把主鍵命名為id,結果在取資料時,會出現找不到_id的錯誤,把主鍵名稱改為_id就正常了,所以應該還是依規定設為_id。
在使用SQLite時,你並不用先去建立資料庫檔案,而由Android幫你建立。你必須繼承SQLiteOpenHelper類別,由它來負責管理資料庫的建G2000立和版本控制。你必須覆寫onCreate及onUpgrade方法,當你第一次使用資料庫時(查詢或新增),若Android找不到資料庫檔案,就會觸發onCreate方法來建立,若已經有檔案了,則不再建立。當資料庫結構有更新時,即版本號有更改,就會觸發onUpgrade方法來更新資料庫,可以砍掉重建,也可直接更新結構。
在程式碼中,對於資料表汽車貸款欄位可以直接用字串寫在SQL語法中,可是一來可能誤打,當欄位要改名時,也必須一個一個去修改,不安全也沒效率。你可以繼承BaseColumns介面,把資料表中的欄位以常數來建立,使用上較方便。使用時記得要先import進來。此外,在BaseColumns中不需再建立_id,因為BaseColumns介面已經預設有了,請看API。
你也可以把資料和view做資料繫結,直接讓查詢結果顯室內裝潢示在view中。

永慶房屋例程式碼說明


SQLiteDemoActivity.java :主要的顯示畫面,上方有4個文字輸入區,id只有在update及delete時才需輸入。中間有3個按鈕,而別是Add(新增)、Update(修改)、Delete(刪除),下方有2個結果顯示區,上面那個以迴圈取得資料後顯示,下方的ListView則是以資料繫結的方式顯示。
DBHelper.java :用來管理資料庫的建立及更新。
DbConstants.java :資料庫欄位的常數值。

範例程式碼

SQLiteDemoActivity.java
package com.tonycube.demo;
import static android.provider.BaseColumns._ID;
import static com.tonycube.demo.DbConstants.EMAIL;
import static com.tonycube.demo.DbConstants.NAME;
import static com.tonycube.demo.DbConstants.TABLE_NAME;
import static com.tonycube.demo.DbConstants.TEL;
import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
public class SQLiteDemoActivity extends Activity implements OnClickListener {
private DBHelper dbhelper = null;
private TextView result = null;
private ListView listData = null;
private EditText editName = null;
private EditText editTel = null;
private EditText editEmail = null;
private EditText editId = null;
private Button btnAdd = null;
private Button btnDel = null;
private Button btnUpdate = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initView();
openDatabase();
show();
showInList();
}
@Override
protected void onDestroy() {
super.onDestroy();
closeDatabase();
}
private void openDatabase(){
dbhelper = new DBHelper(this);
}
private void closeDatabase(){
dbhelper.close();
}
private void initView(){
result = (TextView) findViewById(R.id.txtResult);
listData = (ListView) findViewById(R.id.listData);
editName = (EditText) findViewById(R.id.editName);
editTel = (EditText) findViewById(R.id.editTel);
editEmail = (EditText) findViewById(R.id.editEmail);
editId = (EditText) findViewById(R.id.editId);
btnAdd = (Button) findViewById(R.id.btnAdd);
btnDel = (Button) findViewById(R.id.btnDel);
btnUpdate = (Button) findViewById(R.id.btnUpdate);
btnAdd.setOnClickListener(this);
btnDel.setOnClickListener(this);
btnUpdate.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnAdd:
add();
break;
case R.id.btnDel:
del();
break;
case R.id.btnUpdate:
update();
break;
default:
break;
}
show();
showInList();
}
private void add(){
SQLiteDatabase db = dbhelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(NAME, editName.getText().toString());
values.put(TEL, editTel.getText().toString());
values.put(EMAIL, editEmail.getText().toString());
db.insert(TABLE_NAME, null, values);
cleanEditText();
}
private Cursor getCursor(){
SQLiteDatabase db = dbhelper.getReadableDatabase();
String[] columns = {_ID, NAME, TEL, EMAIL};
Cursor cursor = db.query(TABLE_NAME, columns, null, null, null, null, null);
startManagingCursor(cursor);
return cursor;
}
private void show(){
Cursor cursor = getCursor();
StringBuilder resultData = new StringBuilder("RESULT: n");
while(cursor.moveToNext()){
int id = cursor.getInt(0);
String name = cursor.getString(1);
String tel = cursor.getString(2);
String email = cursor.getString(3);
resultData.append(id).append(": ");
resultData.append(name).append(": ");
resultData.append(tel).append(": ");
resultData.append(email).append(": ");
resultData.append("n");
}
result.setText(resultData);
}
private void showInList(){
Cursor cursor = getCursor();
String[] from = {_ID, NAME, TEL, EMAIL};
int[] to = {R.id.txtId, R.id.txtName, R.id.txtTel, R.id.txtEmail};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.data_item, cursor, from, to);
listData.setAdapter(adapter);
}
private void del(){
String id = editId.getText().toString();
SQLiteDatabase db = dbhelper.getWritableDatabase();
db.delete(TABLE_NAME, _ID + "=" + id, null);
cleanEditText();
}
private void update(){
String id = editId.getText().toString();
ContentValues values = new ContentValues();
values.put(NAME, editName.getText().toString());
values.put(TEL, editTel.getText().toString());
values.put(EMAIL, editEmail.getText().toString());
SQLiteDatabase db = dbhelper.getWritableDatabase();
db.update(TABLE_NAME, values, _ID + "=" + id, null);
cleanEditText();
}
private void cleanEditText(){
editName.setText("");
editTel.setText("");
editEmail.setText("");
editId.setText("");
}
}
DBHelper.java
package com.tonycube.demo;
import static com.tonycube.demo.DbConstants.TABLE_NAME;
import static android.provider.BaseColumns._ID;
import static com.tonycube.demo.DbConstants.NAME;
import static com.tonycube.demo.DbConstants.TEL;
import static com.tonycube.demo.DbConstants.EMAIL;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBHelper extends SQLiteOpenHelper {
private final static String DATABASE_NAME = "demo.db";
private final static int DATABASE_VERSION = 1;
public DBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
final String INIT_TABLE = "CREATE TABLE " + TABLE_NAME + " (" +
_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
NAME + " CHAR, " +
TEL + " CHAR, " +
EMAIL + " CHAR);";
db.execSQL(INIT_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
final String DROP_TABLE = "DROP TABLE IF EXISTS " + TABLE_NAME;
db.execSQL(DROP_TABLE);
onCreate(db);
}
}
DbConstants.java
package com.tonycube.demo;
import android.provider.BaseColumns;
public interface DbConstants extends BaseColumns {
public static final String TABLE_NAME = "friends";
public static final String NAME = "name";
public static final String TEL = "tel";
public static final String EMAIL = "email";
} 
相簿設定
標籤設定
相簿狀態