Android 数据存储操作(3)——SQLite数据库
来源:互联网 发布:日本观光局数据 编辑:程序博客网 时间:2024/06/11 15:48
现在的主流移动设备像Android、iPhone等都使用SQLite作为复杂数据的存储引擎,在我们为移动设备开发应用程序时,也许就要使用到SQLite来存储我们大量的数据,所以我们就需要掌握移动设备上的SQLite开发技巧。对于Android平台来说,系统内置了丰富的API来供开发人员操作SQLite,我们可以轻松的完成对数据的存取。
1. SQLite常用的操作方法
MainActivity.java
package com.example.db;import android.os.Bundle;import android.app.Activity;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.util.Log;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity implements OnClickListener {private Button insertButton;private Button deleteButton;private Button updateButton;private Button findButton;private SQLiteDatabase db;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);insertButton = (Button) findViewById(R.id.Insert);insertButton.setOnClickListener(this);deleteButton = (Button) findViewById(R.id.Delete);deleteButton.setOnClickListener(this);updateButton = (Button) findViewById(R.id.Update);updateButton.setOnClickListener(this);findButton = (Button) findViewById(R.id.Find);findButton.setOnClickListener(this);createDB();}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.activity_main, menu);return true;}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubif (v.equals(insertButton)) {ContentValues val = new ContentValues();Person person = new Person("join", 30);val.put("name", person.getName());val.put("age", person.getAge());db.insert("person", null, val);}if (v.equals(deleteButton)) {db.delete("person", "age > ?", new String[] { "33" });}if (v.equals(updateButton)) {ContentValues val = new ContentValues();val.put("age", 35);db.update("person", val, "name = ?", new String[] { "join" });}if (v.equals(findButton)) {Cursor c = db.rawQuery("SELECT * FROM person WHERE age >= ?", new String[]{"33"}); while (c.moveToNext()) { int _id = c.getInt(c.getColumnIndex("_id")); String name = c.getString(c.getColumnIndex("name")); int age = c.getInt(c.getColumnIndex("age")); Log.i("test", "_id=>" + _id + ", name=>" + name + ", age=>" + age); } }}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();db.close();}public void createDB() {db = openOrCreateDatabase("test.db", Context.MODE_PRIVATE, null);db.execSQL("DROP TABLE IF EXISTS person");db.execSQL("CREATE TABLE person (_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, age SMALLINT)");}}Person.java
package com.example.db;public class Person {private Integer id;private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}public Person(Integer id, String name, int age) {super();this.id = id;this.name = name;this.age = age;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(Short age) {this.age = age;}@Overridepublic String toString() {return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";}}(1)在执行完上面的代码后,系统就会在/data/data/[PACKAGE_NAME]/databases目录下生成一个“test.db”的数据库文件.
(2)Android中对数据库进行操作的相关的接口、类等都在andorid.database和android.database.sqlite两个包里面。里面存在着很多的与数据库操作相关的类,但是在平时普通的开发中最经常遇到的仅仅就是那几个
db.insert(String table, String nullColumnHack, ContentValues values); db.update(String table, Contentvalues values, String whereClause, String whereArgs); db.delete(String table, String whereClause, String whereArgs);以上三个方法的第一个参数都是表示要操作的表名;insert中的第二个参数表示如果插入的数据每一列都为空的话,需要指定此行中某一列的名称,系统将此列设置为NULL,不至于出现错误;insert中的第三个参数是ContentValues类型的变量,是键值对组成的Map,key代表列名,value代表该列要插入的值;update的第二个参数也很类似,只不过它是更新该字段key为最新的value值,第三个参数whereClause表示WHERE表达式,比如“age > ? and age < ?”等,最后的whereArgs参数是占位符的实际参数值;delete方法的参数也是一样。
(3)查询操作相对于上面的几种操作要复杂些,因为我们经常要面对着各种各样的查询条件,所以系统也考虑到这种复杂性,为我们提供了较为丰富的查询形式:
db.rawQuery(String sql, String[] selectionArgs); db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy); db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit); db.query(String distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);上面几种都是常用的查询方法,第一种最为简单,将所有的SQL语句都组织到一个字符串中,使用占位符代替实际参数,selectionArgs就是占位符实际参数集;下面的几种参数都很类似,columns表示要查询的列所有名称集,selection表示WHERE之后的条件语句,可以使用占位符,groupBy指定分组的列名,having指定分组条件,配合groupBy使用,orderBy指定排序的列名,limit指定分页参数,distinct可以指定“true”或“false”表示要不要过滤重复值。需要注意的是,selection、groupBy、having、orderBy、limit这几个参数中不包括“WHERE”、“GROUP BY”、“HAVING”、“ORDER BY”、“LIMIT”等SQL关键字。最后,他们同时返回一个Cursor对象,代表数据集的游标,有点类似于JavaSE中的ResultSet。
(4)最后当我们完成了对数据库的操作后,记得调用SQLiteDatabase的close()方法释放数据库连接,否则容易出现SQLiteException。
- Android 数据存储操作(3)——SQLite数据库
- Android数据存储之——SQLite数据库操作
- Android数据存储(3)——SQLite数据库的操作_增删改查完整输出
- Android——数据库sqlite存储数据
- Android数据存储—使用SQLite数据库
- Android数据存储—使用SQLite数据库
- Android中数据存储——SQLite数据库存储数据
- Android数据存储——SQLite数据库存储
- 【android学习之十】——数据存储2:SQLite数据库操作
- 数据存储——SQLite 数据库存储
- android数据存储—SQLite
- Android——数据存储之SQLite数据库
- Android数据存储——SQLite数据库(模板)
- Android数据持久化——SQLite数据库存储
- Android学习笔记034之数据存储—SQLite数据库
- Android App开发基础篇—数据存储(SQLite数据库)
- Android学习笔记三十四之数据存储—SQLite数据库
- 【Android 开发】:数据存储之 SQLite 数据库操作(一)
- volatile关键字的作用
- MySQL统计函数记录——GROUP_CONCAT()函数
- larbin的编译 运行+三个配置文件阅读
- 开源加密解密库比较
- 用CSS实现下拉菜单的多种方法
- Android 数据存储操作(3)——SQLite数据库
- C++对象的生死
- Rails的script如何引入Rails的环境?
- 韩顺平_php从入门到精通_视频教程_第7讲_表单及表单控件②_学习笔记_源代码图解_PPT文档整理
- Eclipse 测试工具
- 微软等数据结构+算法面试100题(45)-- 在二元树中找出和为某一值的所有路径
- ubuntu install navicat
- 关于c++中虚函数和接口的关系区分
- iPhone 掌握蓝牙通信编程