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

时间:2021-01-23 10:37:21

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

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

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

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

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

实例的文件组织如下:

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

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

Android数据读取之Sqlite数据库操作的更多相关文章

  1. Android数据存储之SQLite数据库

    Android数据存储 之SQLite数据库简介 SQLite的相关知识,并结合Java实现对SQLite数据库的操作. SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎. ...

  2. 【Android】实验8 SQLite数据库操作2016&period;5&period;12

    实验8  SQLite数据库操作 [目的] 设计一个个人通讯录,掌握Android平台下的数据库开发,该个人通讯录主要包括联系人列表和联系人详细信息等界面. [要求] 程序主界面是通讯录的目录显示手机 ...

  3. Android 数据存储之 SQLite数据库存储

    ----------------------------------------SQLite数据库---------------------------------------------- SQLi ...

  4. 【Android 应用开发】Android 数据存储 之 SQLite数据库详解

    . 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/19028665 . SQLiteDataBase示例程序下 ...

  5. Android数据存储之SQLite 数据库学习

    Android提供了五种存取数据的方式 (1)SharedPreference,存放较少的五种类型的数据,只能在同一个包内使用,生成XML的格式存放在设备中 (2) SQLite数据库,存放各种数据, ...

  6. Android 数据存储 之 SQLite数据库详解

    . 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/19028665 . SQLiteDataBase示例程序下 ...

  7. Android数据存储引擎---SQLite数据库

    目标:是否可以在PC端桌面上使用SQLite数据库制作一个财务文件? 目录: 来源: 实践: 总结和比较: SQLite数据简介 是什么,内部结构是怎样的,数据库和表的关系是什么 有什么用 常用的操作 ...

  8. Android数据存储之SQLite的操作

    Android作为一个应用在移动设备上的操作系统,自然也就少不了数据的存储.然而SQLite作为一个轻型的关系型数据库,基于其轻量.跨平台.多语言接口及安全性等诸多因数考虑,因而Android较大的数 ...

  9. 我的Android六章&colon;Android中SQLite数据库操作

    今天学习的内容是Android中的SQLite数据库操作,在讲解这个内容之前小编在前面有一篇博客也是讲解了SQLite数据库的操作,而那篇博客的讲解是讲述了 如何在Window中通过DOM来操作数据库 ...

随机推荐

  1. python &percnt;s深入解析

    默认我们通常用字符串填充它 'Keep %s, and you will aways make %' % ('moving', 'it') 如果你就此止步,那就错过了一些神乎其技的用法 比如: arr ...

  2. 【jquery】jquery&period;cookie&period;js 的使用指南

    之前有写过一篇原生 js 的 cookie 介绍,并且最后封装成 cookie.js 具体内容点击传送门. jquery.cookie.js 是一款轻量级的 cookie 插件,可以读取,写入和删除 ...

  3. SEPM安装完之后的一些细节之处

    1. 若SEPM与GUP为同一台主机,则必须在其上也安装SEP, 否则其他客户端无法更新.   2. 先指定GUP,然后指派策略   3. Latest on Manager可以通过离线jdb文件进行 ...

  4. SharePoint 2013 Nintex Workflow 工作流帮助(十二)

    博客地址 http://blog.csdn.net/foxdave 工作流动作 31. Create task(User interaction分组,企业版才有) 该操作用于在Microsoft Ex ...

  5. ZOJ 4114 Detect the Virus(AC自动机)

    Detect the Virus Time Limit: 2 Seconds      Memory Limit: 65536 KB One day, Nobita found that his co ...

  6. C&plus;&plus;编程练习&lpar;10&rpar;----&OpenCurlyDoubleQuote;图的最小生成树&OpenCurlyDoubleQuote;(Prim算法、Kruskal算法)

    1.Prim 算法 以某顶点为起点,逐步找各顶点上最小权值的边来构建最小生成树. 2.Kruskal 算法 直接寻找最小权值的边来构建最小生成树. 比较: Kruskal 算法主要是针对边来展开,边数 ...

  7. vs2017 调试时 浏览器关闭不想中断调试

    解决方案 工具—>选项—>项目和解决方案—>web项目-->去点“浏览器窗口关闭时停止调试”前面的勾去掉>>>

  8. Spring 中 Bean 的生命周期

    所谓 Bean 的生命周期,就是一个 Bean 从创建到销毁,所经历的各种方法调用.大致包含下面几个方法(不是全部) Bean 的实例化,调用了构造方法. 使用 setter 方法填充属性. 一旦依赖 ...

  9. Libevent源码分析—event&lowbar;base&lowbar;dispatch&lpar;&rpar;

    我们知道libevent是一个Reactor模式的事件驱动的网络库.   到目前为止,我们已经看了核心的event和event_base结构体的源码,看了初始化这两个结构体的源码,看了注册event的 ...

  10. Ubuntu16&period;04安装

    这篇博文主要是想记录自己以前安装ubuntu的经历.当然参考了很多其他优秀的文章,在这里推荐一篇博客,请踩这个地址-->http://www.cnblogs.com/Duane/p/542421 ...