Android數據讀取之Sqlite數據庫操作

咱們書接上文,繼續來說說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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章