前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android数据读取之Sqlite数据库操作

Android数据读取之Sqlite数据库操作

作者头像
lzugis
发布2018-10-23 16:03:04
1.4K0
发布2018-10-23 16:03:04
举报

咱们书接上文,继续来说说Android数据读取,这回,我们要讲的是Sqlite数据库的相关操作。以一个实例开始吧:

首先,上图,看看做成后的效果:

大概描述:类似于浏览器的收藏夹,网站名称,网站地址,网站描述,添加完成之后显示已添加的所有的内容,在ListView单击弹出是否删除对话框,删除成功后刷新视图并重新查询内容。

安卓提供了创建和使用SQLite数据库的API。SQLiteDataBase代表一个数据库对象,提供了操作数据库的一些方法,另外还有一个SQLiteOpenHelper工具类更简洁的功能。

实例的文件组织如下:

main.xml是添加界面,query.xml是查询界面,DBHelper是数据库操作类,MainActivity和QueryActivity分别对应main和query的Activity,其中,QueryActivity继承ListActivity。源代码如下:

DBHelper.java

代码语言:javascript
复制
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

代码语言:javascript
复制
<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

代码语言:javascript
复制
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

代码语言:javascript
复制
<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

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013年12月18日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档