咱们书接上文,继续来说说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

posted on 2013-12-18 11:22  LZU-GIS  阅读(2159)  评论(0编辑  收藏  举报