咱們書接上文,繼續來說說Android數據讀取,這回,我們要講的是Sqlite數據庫的相關操作。以一個實例開始吧:
首先,上圖,看看做成後的效果:
大概描述:類似於瀏覽器的收藏夾,網站名稱,網站地址,網站描述,添加完成之後顯示已添加的所有的內容,在ListView單擊彈出是否刪除對話框,刪除成功後刷新視圖並重新查詢內容。
安卓提供了創建和使用SQLite數據庫的API。SQLiteDataBase代表一個數據庫對象,提供了操作數據庫的一些方法,另外還有一個SQLiteOpenHelper工具類更簡潔的功能。
實例的文件組織如下:
main.xml是添加界面,query.xml是查詢界面,DBHelper是數據庫操作類,MainActivity和QueryActivity分別對應main和query的Activity,其中,QueryActivity繼承ListActivity。源代碼如下:
DBHelper.java
package com.lzugis.database; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DBHelper extends SQLiteOpenHelper { //數據庫名稱 private static final String DB_NAME="coll.db"; //表名稱 private static final String TBL_NAME="CollTbl"; //創建表SQL語句 private static final String CREATE_TBL=" create table " +" CollTbl(_id integer primary key autoincrement,name text,url text,desc text)"; //SQLiteDatabase實例 private SQLiteDatabase db; /* * 構造方法 */ DBHelper(Context c){ super(c,DB_NAME,null,2); }; /* * 創建表 * @see android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite.SQLiteDatabase) */ public void onCreate(SQLiteDatabase db) { this.db=db; db.execSQL(CREATE_TBL); } /* * 插入方法 */ public void insert(ContentValues values) { //獲得SQLiteDatabase實例 SQLiteDatabase db=getWritableDatabase(); //插入 db.insert(TBL_NAME, null, values); //關閉 db.close(); } /* * 查詢方法 */ public Cursor query() { //獲得SQLiteDatabase實例 SQLiteDatabase db=getWritableDatabase(); //查詢獲得Cursor Cursor c=db.query(TBL_NAME, null, null, null, null, null, null); return c; } /* * 刪除方法 */ public void del(int id) { if(db==null) { //獲得SQLiteDatabase實例 db=getWritableDatabase(); } //執行刪除 db.delete(TBL_NAME, "_id=?", new String[]{String.valueOf(id)}); } /* * 關閉數據庫 */ public void colse() { if(db!=null) { db.close(); } } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub } }
main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="網站名稱" /> <EditText android:id="@+id/EditTextName" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" > <requestFocus /> </EditText> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="網站地址" /> <EditText android:id="@+id/EditTextUrl" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" /> <TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="網站描述" /> <EditText android:id="@+id/EditTextDesc" android:layout_width="match_parent" android:layout_height="100dp" android:ems="10" /> <Button android:id="@+id/ButtonAdd" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="添加" /> </LinearLayout>
MainActivity.java
package com.lzugis.database; import android.os.Bundle; import android.app.Activity; import android.content.ContentValues; import android.content.Intent; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class MainActivity extends Activity { private EditText etName,etUrl,etDesc; private Button btnAdd; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); etName=(EditText)findViewById(R.id.EditTextName); etUrl=(EditText)findViewById(R.id.EditTextUrl); etDesc=(EditText)findViewById(R.id.EditTextDesc); btnAdd=(Button)findViewById(R.id.ButtonAdd); btnAdd.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub String name=etName.getText().toString(); String url=etUrl.getText().toString(); String desc=etDesc.getText().toString(); //內容值實例 ContentValues values=new ContentValues(); //在value中添加信息 values.put("name",name); values.put("url", url); values.put("desc", desc); //實例化數據幫助類 DBHelper helper=new DBHelper(getApplicationContext()); //插入數據 helper.insert(values); //實例化intent Intent intent=new Intent(MainActivity.this,QueryActivity.class); //啓動Activity startActivity(intent); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
query.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/text0" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingRight="10pt" /> <TextView android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingRight="10pt" /> <TextView android:id="@+id/text2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingRight="10pt" /> <TextView android:id="@+id/text3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingRight="10pt" /> </LinearLayout>
QueryActivity.java
package com.lzugis.database; import android.os.Bundle; import android.app.AlertDialog; import android.app.ListActivity; import android.content.DialogInterface; import android.database.Cursor; import android.support.v4.widget.SimpleCursorAdapter; import android.view.Menu; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; public class QueryActivity extends ListActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //設置標題 this.setTitle("瀏覽收藏信息"); //實例化數據庫幫助類 final DBHelper helper=new DBHelper(this); //查詢獲得遊標 Cursor c=helper.query(); //列表項數組 String[] from={"_id","name","url","desc"}; //列表項ID int[] to={R.id.text0,R.id.text1,R.id.text2,R.id.text3}; //適配器 SimpleCursorAdapter apt=new SimpleCursorAdapter(this,R.layout.query,c,from,to); //列表視圖 ListView listview =getListView(); //爲列表視圖添加適配器 listview.setAdapter(apt); //提示對話框 final AlertDialog.Builder builder=new AlertDialog.Builder(this); //爲listView添加監聽器 listview.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub final long temp=arg3; builder.setMessage("真的要刪除記錄嗎?") .setPositiveButton("是", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub //刪除數據 helper.del((int)temp); //重新查詢 Cursor c=helper.query(); //列表項數組 String[] from={"_id","name","url","desc"}; //列表項ID int[] to={R.id.text0,R.id.text1,R.id.text2,R.id.text3}; //適配器 SimpleCursorAdapter apt=new SimpleCursorAdapter(getApplicationContext(),R.layout.query,c,from,to); //列表視圖 ListView listview =getListView(); //爲列表視圖添加適配器 listview.setAdapter(apt); } }) .setNegativeButton("否", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }); AlertDialog ad=builder.create(); ad.show(); } }); helper.close(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.query, menu); return true; } }
附件:
有需要源碼的請移步:http://download.csdn.net/detail/gisshixisheng/6733227