sqlite两种方式实现增删改查

标签: sqlite | 发表时间:2015-01-29 22:29 | 作者:
出处:http://www.iteye.com

sqlite有两种方式操作数据库:

 

     第一种就是像oracle一样直接写sql语句

    第二种就是借助工具,只写关键代码

 

下面将对这两种方式进行演示:



 

 

1 ,在xml中创建按钮,进行 查询和 固定的删除,修改,添加, 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginTop="130dp" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView1"
        android:layout_marginLeft="18dp"
        android:layout_marginTop="44dp"
        android:onClick="optionuser"
        android:text="添加" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/button1"
        android:layout_marginLeft="46dp"
        android:layout_toRightOf="@+id/button1"
        android:onClick="optionuser"
        android:text="删除" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/button1"
        android:layout_below="@+id/button1"
        android:layout_marginTop="22dp"
        android:onClick="optionuser"
        android:text="修改" />

    <Button
        android:id="@+id/button4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/button3"
        android:layout_alignBottom="@+id/button3"
        android:layout_alignLeft="@+id/button2"
        android:onClick="optionuser"
        android:text="查询" />

</RelativeLayout>

 

2,创建数据库的表的类

public class HelperDemo extends SQLiteOpenHelper{

	public HelperDemo(Context context, String name, CursorFactory factory,
			int version) {
	//参数一:上下文
		//参数二:数据库的名字
		//参数三:游标 没有游标就为null
		//参数四:数据库的版本号 版本号不能小于当前的版本号
		super(context, name, factory, version);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		//创建表
		String sql="create table user(_id integer primary key autoincrement,userphone txet,username text)";
		db.execSQL(sql);
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub
		
	}

}

 

分析:

创建数据库 需要继承SQLiteOpenHelper 并重写里面的onCreate()和onUpgrade()方法;

 

onCreate()方法;创建表   回调函数  在程序执行时需要操作该表时,如发现没有该表就会回调onCreate方法创建表;该方法只会执行一次

 

onUpgrade();当版本号更新时,会回调该函数

 

 

3,实现增删改查的操作(两种方式);

/**
 * 
 * @author Administrator 数据库的操作
 */
public class DemoDB extends Activity {
     //v1显示查询的结果
   //t1,t2,t3,t4分别是增删改查按钮
	private TextView v1;
	private Button t1;
	private Button t2;
	private Button t3;
	private Button t4;
	private HelperDemo demo; 获取数据库对象
	private SQLiteDatabase database;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main_db);
             //实例化数据库对象
		demo = new HelperDemo(this, "user_contacts", null, 1);
        //获得xml的组件
		v1 = (TextView) this.findViewById(R.id.textView1);
		t1 = (Button) this.findViewById(R.id.button1);
		t2 = (Button) this.findViewById(R.id.button2);
		t3 = (Button) this.findViewById(R.id.button3);
		t4 = (Button) this.findViewById(R.id.button4);

	}

	// 数据库的操作
	public void optionuser(View v) {
		switch (v.getId()) {
		case R.id.button1:// 添加数据
		database = demo.getWritableDatabase(); //获得写数据的对象
                  //判断是否可以写数据等操作
			if (database == null) {
			Toast.makeText(this, "不能添加数据", Toast.LENGTH_SHORT).show();
			} else {
				// 第一个方式
		     String sql = "insert into user values(null,'12345','长沙')";
				database.execSQL(sql);

				// 第二种方式
				// 参数一:表名
				// 参数二:null
				// 参数三:使用ContentValues赋值
				// ContentValues values = new ContentValues();
				// values.put("userphone", "123");
				// values.put("username", "value");
				//
				// database.insert("user", null, values);
				selectuser();
			}
			break;

		case R.id.button2:// 删除
			database = demo.getWritableDatabase();
			if (database == null) {
		Toast.makeText(this, "不能删除数据数据", Toast.LENGTH_SHORT).show();
			} else {

				// //第一种方式
				// String sql ="delete from user where _id=?";
				// String[] str= {"1"};
				// database.execSQL(sql, str);

				// 第二种方式
				// 参数一:表名
				// 参数二:条件
				// 参数三:条件的值
				String whereClause = "_id=?";
				String[] whereArgs = { "2" };
				database.delete("user", whereClause, whereArgs);
			}

			selectuser();
			break;
		case R.id.button3:// 修改
			database = demo.getWritableDatabase();
			if (database == null) {
		Toast.makeText(this, "不能修改数据", Toast.LENGTH_SHORT).show();
			} else {

				// 第一种方式

		// String sql="update user set username='武汉' where _id=6";
				// database.execSQL(sql);

				// 参数一:表名
				// 参数二:更新的值
				// 参数三:?的字段名
				// 参数四:?字段名的值
				ContentValues values = new ContentValues();
				values.put("username", "北京");
				String whereClause = "_id=?";
				String[] whereArgs = { "5" };
				database.update("user", values, whereClause, whereArgs);
			}

			selectuser();
			break;
		case R.id.button4:// 查询
			selectuser();

			break;
		}
	}

	// 查询
	public void selectuser() {
		SQLiteDatabase database2 = demo.getReadableDatabase();
//		// 第一种方式
//		String sql = "select * from user order by _id desc";
//		Cursor c = database2.rawQuery(sql, null);
//		StringBuffer buffer = new StringBuffer();
//		while (c.moveToNext()) {
//			int id = c.getInt(c.getColumnIndex("_id"));
//			String phone = c.getString(c.getColumnIndex("userphone"));
//			String name = c.getString(c.getColumnIndex("username"));
//			buffer.append(id + "\t姓名:\t" + name + "<><>电话:\t" + phone + "\r\n");
//		}
//		v1.setText(buffer);
		
		//第二种方式
		//参数一:表名
		//查询数据会返回一个游标对象,遍历游标对象就得到值
		Cursor c=database2.query("user", null, null, null, null, null, null);
		StringBuffer buffer = new StringBuffer();
		while (c.moveToNext()) {
			int id = c.getInt(c.getColumnIndex("_id"));
			String phone = c.getString(c.getColumnIndex("userphone"));
			String name = c.getString(c.getColumnIndex("username"));
		buffer.append(id + "\t姓名:\t" + name + "<><>电话:\t" + phone + "\r\n");
		}
		v1.setText(buffer);
	}

}

 

 

分析:

增删改;需要判断数据库的表是否可以进行写的操作;

database = demo.getWritableDatabase();

if (database == null) {

Toast.makeText(this, "不能修改数据", Toast.LENGTH_SHORT).show();

}

 

 

 

 

 

 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [sqlite] 推荐:

Android学习笔记(六)SQLite

- - 博客园_首页
SQLite是一个极轻量型的数据库. 它在提供了和大型数据库相当的功能,还具有轻便、跨平台等优点,SQLite使用非常方便,并不需要我们像常规数据库(SQLServer,Mysql等)那样进行安装,在Android的JDK中,其实是已经包含了SQLite这个数据库的核心. 当然我们必须要强调一点,SQLite并不是只针对Android的,其实它还可以用在别的很多地方.

将Access转为SQLite数据库

- zhouding - 博客园-首页原创精华区
           SQLite是一个轻量型的数据库,各方面由于Access,对于小型网站来说,非常适合. 我今天决定将系统的数据库由Access转换为SQLite. 在网上搜索了一下,找到了DBManager这个工具,不得不说,这个软件确实好,很强大,在网上找注册码也找到半天,找不到一个.            只要将Access转换为SQLite,然后使用System.Data.SQLite.dll来访问数据库.

SQLite的原子提交原理

- way - chensheng.net
本文源自:http://www.sqlite.org/atomiccommit.html,2007/11/28的版本. 本人正在做一个项目,在项目中定义了自己的文件格式,为了做到停电或程序崩溃不损坏这些文件原有的数据,故针对操作的原子性做一些思考,后来看到sqlite的这篇文章,与自己的实现方式作了一些对比.

SQLite数据库存储引擎设计

- - searchdatabase
  SQLite是一个嵌入式库并且实现了零配置、无服务端和事务功能的SQL数据库引擎. 它在广泛领域内被使用,而且单线程读写性能与MySQL比肩,并且保证ACID性.   SQLite的存储后端是采用Btree实现,多个连接可以并发操作,但是同一时间只允许一个写着存在.   SQLite在硬盘上一个数据库一个文件,每个数据库文件头部保存有这个数据库的元信息,包括版本,大小,Btree根节点位置等等.

sqlite插入速度优化方案

- - CSDN博客移动开发推荐文章
先贴上SQLiteOpenHelper的代码,我们创建测试的表是user,它有四个字段id,name,age,height,remark,测试用的小米2,默认条数为100行. // 必须要有这一个构造方法. // 当数据库第一次创建的时候被调用,. // 当调用getReadableDatabase ()或getWritableDatabase 的时候.

Android数据的四种存储方式SharePreference、SQLite、Content Provider和File (二) —— SQLite

- stony - 博客园-首页原创精华区
  SQLite是一种转为嵌入式设备设计的轻型数据库,其只有五种数据类型,分别是:.     INTEGER: 整数.   在SQLite中,并没有专门设计BOOLEAN和DATE类型,因为BOOLEAN型可以用INTEGER的0和1代替true和false,而DATE类型则可以拥有特定格式的TEXT、REAL和INTEGER的值来代替显示,为了能方便的操作DATE类型,SQLite提供了一组函数,详见:http://www.sqlite.org/lang_datefunc.html.

Android-小项目之迷你英文词典-使用existing sqlite database-github第三库android-sqlite-asset-helper

- - CSDN博客移动开发推荐文章
将已有的词典数据库文件,用到项目中. 谷歌搜索“android existing sqlite database”. 但是,如果 数据库文件在 assets 目录下,该如何做呢. private EditText mEditText; //输入框. private TextView mReslutView; //显示查询结果.

SQLite在多线程环境下的应用

- ndv - keakon的涂鸦馆
这几天研究了一下SQLite这个嵌入式数据库在多线程环境下的应用,感觉里面的学问还挺多,于是就在此分享一下. 先说下初衷吧,实际上我经常看到有人抱怨SQLite不支持多线程. 而在iOS开发时,为了不阻塞主线程,数据库访问必须移到子线程中. 为了解决这个矛盾,很有必要对此一探究竟. 关于这个问题,最权威的解答当然是SQLite官网上的“Is SQLite threadsafe?”这个问答.

关于SQLite数据库的那些事儿

- - ITeye博客
在Android平台上,集成了一个嵌入式关系型数据库——SQLite. SQLite第一个Alpha版本诞生于2000年5月. 它是遵守ACID的关联式数据库管理系统,包含在一个相对小的C库中,同时是D.RichardHipp建立的公有领域项目. SQLite官方网站: http://www.sqlite.org/;SQLite中文社区:http://www.sqlite.com.cn/.

Sqlite数据库分页查询(ListView分页显示数据)

- - CSDN博客推荐文章
今天项目中遇到个问题,之前数据量不算多的时候,ListView显示正常,但是当数据量很大得分时候,进入画面,显示数据比较慢,. 而且不能放在UI线程中去拿数据,用子线程去拿把,画面出来了,但是数据要等很久才会出来,因此,这样给人的体验很不好,算不上好的设计. 因此,查了一下,关于数据库分页ListView分页.