对sqlite的使用做一下简单的汇总。
来源:互联网 发布:动态寄生虫 猫云seo 编辑:程序博客网 时间:2024/06/07 23:43
- /**
- * @FILE:DBOpenHelper.java
- * @AUTHOR:Administrator
- * @DATE:2013-5-14 下午10:06:29
- **/
- package com.yehui.service;
- import android.content.Context;
- import android.database.sqlite.SQLiteDatabase;
- import android.database.sqlite.SQLiteDatabase.CursorFactory;
- import android.database.sqlite.SQLiteOpenHelper;
- /*******************************************
- *
- * @CLASS:DBOpenHelper
- * @DESCRIPTION:sqlite数据库必须继承SQLiteOpenHelper(抽象类)
- * @AUTHOR:Administrator
- * @VERSION:v1.0
- * @DATE:2013-5-14 下午10:06:29
- *******************************************/
- public class DBOpenHelper extends SQLiteOpenHelper {
- /**
- * create a instance DBOpenHelper.
- *
- * @param context
- * 上下文对象
- * @param name
- * 数据库名称
- * @param factory
- * CursorFactory
- * @param version
- * 版本号(第一次生成数据库时,版本号是1,只执行一次)
- */
- public DBOpenHelper(Context context) {
- super(context, "yehui.db", null, 1);
- }
- /*
- * (non-Javadoc)当创建数据库的时候就会创建下面的表,可以在这里创建多张表:表中的字段的类型可以完全没有,
- * varchar(20)长度并不能限制。可以输入超过20字符的长度。
- *
- * @see
- * android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite
- * .SQLiteDatabase)
- */
- @Override
- public void onCreate(SQLiteDatabase db) {
- String sql = "create table person(personid integer primary key autoincrement, name varchar(20))";
- // 执行这句sql
- db.execSQL(sql);
- }
- /*
- * (non-Javadoc)对数据库更新,可以在这个方法里面对数据表做alter.:也就是说当 super(context, "yehui.db",
- * null, 1);这里面的版本号发生改变的时候就会调用这个方法,执行完成后将数据库的版本号设置为新的版本号
- *
- * @see
- * android.database.sqlite.SQLiteOpenHelper#onUpgrade(android.database.sqlite
- * .SQLiteDatabase, int, int)
- */
- @Override
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- String sql = "ALTER TABLE PERSON ADD PHONE VARCHAR(12) NULL";
- db.execSQL(sql);
- }
- }
- /**
- * @FILE:Person.java
- * @AUTHOR:Administrator
- * @DATE:2013-5-14 下午10:31:18
- **/
- package com.yehui.entity;
- /*******************************************
- *
- * @CLASS:Person
- * @DESCRIPTION:bean
- * @AUTHOR:Administrator
- * @VERSION:v1.0
- * @DATE:2013-5-14 下午10:31:18
- *******************************************/
- public class Person {
- private Integer id;
- private String name;
- private String phone;
- public Person(String name, String phone) {
- this.name = name;
- this.phone = phone;
- }
- public Person(Integer id, String name, String phone) {
- super();
- this.id = id;
- this.name = name;
- this.phone = phone;
- }
- public Person() {
- super();
- }
- @Override
- public String toString() {
- return "Person [id=" + id + ", name=" + name + ", phone=" + phone + "]";
- }
- 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 String getPhone() {
- return phone;
- }
- public void setPhone(String phone) {
- this.phone = phone;
- }
- public static void main(String[] args) {
- Person person = new Person("yehui", "132");
- System.out.println(person.toString());
- }
- }
- /**
- * @FILE:PersonService.java
- * @AUTHOR:Administrator
- * @DATE:2013-5-14 下午10:41:47
- **/
- package com.yehui.service;
- import java.util.ArrayList;
- import java.util.List;
- import android.content.ContentValues;
- import android.content.Context;
- import android.database.Cursor;
- import android.database.sqlite.SQLiteDatabase;
- import android.util.Log;
- import com.yehui.entity.Person;
- /*******************************************
- *
- * @CLASS:PersonService
- * @DESCRIPTION:对person进行增删改查操作
- * @AUTHOR:Administrator
- * @VERSION:v1.0
- * @DATE:2013-5-14 下午10:41:47
- *******************************************/
- public class PersonService {
- private DBOpenHelper dbOpenHelper;
- public final static String TAG = "PersonService";
- /**
- * create a instance PersonService. 会创建数据库
- *
- * @param context
- */
- public PersonService(Context context) {
- super();
- this.dbOpenHelper = new DBOpenHelper(context);
- }
- /**
- * @description:保存
- * @author:Administrator
- * @return:void
- * @param person
- */
- public void save(Person person) {
- // 如果数据表不存在先创建数据表,存在,则不创建
- SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
- // SQLiteDatabase db1 = dbOpenHelper.getWritableDatabase();这个和
- // SQLiteDatabase db是同一个对象
- // 方法1
- // 使用?。参数形式
- // db.execSQL("insert into person(name,phone) values(?,?)", new Object[]
- // {
- // person.getName(), person.getPhone() });
- // 或者使用sqlite自带的操作方法
- // 方法2
- ContentValues values = new ContentValues();
- values.put("name", person.getName());
- values.put("phone", person.getPhone());
- db.insert("person", null, values);
- // 注意这里的第二个参数(表的字段名)。db.insert("person", "personid",
- // null);也就说新增一条纪录,id是null:这个语句不会报错,只会按自增的id新增一条纪录
- }
- /**
- * @description:按照id删除数据
- * @author:Administrator
- * @return:void
- * @param id
- */
- public void delete(Integer id) {
- // 如果数据表不存在先创建数据表,存在,则不创建
- SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
- // 方法1
- // 使用?。参数形式
- // db.execSQL("delete from person where personid=?", new Object[] { id
- // });
- // 方法2
- db.delete("person", "personid=?", new String[] { id.toString() });
- }
- public void update(Person person) {
- // 如果数据表不存在先创建数据表,存在,则不创建
- SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
- // 方法1
- // 使用?。参数形式
- // db.execSQL("update person set name=?,phone=? where personid=? ", new
- // Object[] { person.getName(),person.getPhone(),person.getPersonid()
- // });
- // 方法2
- ContentValues values = new ContentValues();
- values.put("name", person.getName());
- values.put("phone", person.getPhone());
- db.update("person", values, "personid=?", new String[] { person.getId()
- .toString() });
- }
- /**
- * @description:依照id查找数据
- * @author:Administrator
- * @return:Person
- * @param id
- * @return
- */
- public Person find(Integer id) {
- Person person = null;
- // 如果数据表不存在先调用getReadableDatabase方法,存在,则不创建
- SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
- // 方法1
- // 使用?。参数形式
- // Cursor cursor = db.rawQuery("select * from person where personid=?",
- // new String[] { id.toString() });
- // 方法2
- Cursor cursor = db.query("person", null, "personid=?",
- new String[] { id.toString() }, null, null, null);
- // 如果找到一个result,则返回result
- if (cursor.moveToFirst()) {
- person = new Person();
- person.setId(cursor.getColumnIndex("personid"));
- person.setName(cursor.getString(cursor.getColumnIndex("name")));
- person.setPhone(cursor.getString(cursor.getColumnIndex("phone")));
- }
- Log.v(TAG, person.toString());
- cursor.close();
- return person;
- }
- /**
- * @description:分页查询
- * @author:Administrator
- * @return:List<Person> 结果
- * @param offset
- * 跳过几条数据
- * @param maxResult
- * 总共查找几条数据
- * @return
- */
- public List<Person> getScrollData(Integer offset, int maxResult) {
- List<Person> persons = new ArrayList<Person>();
- // 如果数据表不存在先调用getReadableDatabase方法,存在,则不创建
- SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
- // 方法1
- // 使用?。参数形式
- // Cursor cursor = db.rawQuery(
- // "select * from person order by personid asc limit ?,?",
- // new String[] { String.valueOf(offset),
- // String.valueOf(maxResult) });
- // 方法2
- Cursor cursor = db.query("person", null, null, null, null, null,
- "personid asc", offset + "," + maxResult);
- // 循环将结果加入到list中
- while (cursor.moveToNext()) {
- Person person = new Person();
- person.setId(cursor.getColumnIndex("personid"));
- person.setName(cursor.getString(cursor.getColumnIndex("name")));
- person.setPhone(cursor.getString(cursor.getColumnIndex("phone")));
- persons.add(person);
- }
- cursor.close();
- // Log.v(TAG, person.toString());
- return persons;
- }
- /**
- * @description:获得纪录的总数
- * @author:Administrator
- * @return:long
- * @return
- */
- public long getCount() {
- SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
- // 方法1
- // Cursor cursor = db.rawQuery("select count(*) from person", null);
- // 方法2
- Cursor cursor = db.query("person", new String[] { "count('*')" }, null,
- null, null, null, null, null);
- cursor.moveToFirst();
- // 取得第一个字段的所有记录数
- long count = cursor.getLong(0);
- cursor.close();
- Log.v(TAG, "纪录总数" + count);
- return count;
- }
- }
最后使用单元测试来测试功能:
- /**
- * @FILE:DBTest.java
- * @AUTHOR:Administrator
- * @DATE:2013-5-14 下午11:52:06
- **/
- package com.yehui.db;
- import java.util.List;
- import android.app.Activity;
- import android.database.sqlite.SQLiteDatabase;
- import android.os.Bundle;
- import android.test.AndroidTestCase;
- import android.view.Menu;
- import com.yehui.entity.Person;
- import com.yehui.service.DBOpenHelper;
- import com.yehui.service.PersonService;
- /*******************************************
- *
- * @CLASS:DBTest
- * @DESCRIPTION:sqlite单元测试必须继承AndroidTestCase
- * @AUTHOR:Administrator
- * @VERSION:v1.0
- * @DATE:2013-5-14 下午11:52:06
- *******************************************/
- public class DBTest extends AndroidTestCase {
- private DBOpenHelper dbOpenHelper;
- private SQLiteDatabase sqliteDatabase;
- public void createDB() {
- dbOpenHelper = new DBOpenHelper(this.getContext());
- // 创建数据表
- sqliteDatabase = dbOpenHelper.getWritableDatabase();
- }
- public void save() {
- PersonService personService = new PersonService(
- this.getContext());
- Person person = new Person("zhangxueyou", "123456");
- personService.save(person);
- }
- public void delete() {
- PersonService personService = new PersonService(
- this.getContext());
- personService.delete(2);
- }
- public void update() {
- PersonService personService = new PersonService(
- this.getContext());
- Person person = personService.find(1);
- person.setName("guofucheng");
- personService.update(person);
- }
- public Person find() {
- PersonService personService = new PersonService(
- this.getContext());
- Person person = personService.find(1);
- return person;
- }
- public List<Person> getScrollData() {
- PersonService personService = new PersonService(
- this.getContext());
- List<Person> persons = personService.getScrollData(0, 2);
- return persons;
- }
- public long getCount() {
- PersonService personService = new PersonService(
- this.getContext());
- long count = personService.getCount();
- return count;
- }
- }
好了,总结就这么多了。
补充一点,sqlite事物处理:
SqliteDatabase db=dbOpenHelper.getReadableDatabase();
//开始事物
db.beginTransaction();
try{
sql语句;
sql语句;
//提交事物
db.setTransactionSuccessful();
}catch(Exception e){
}finally{
//结束事物
db.endTransaction();
}
下面添加复杂查询的方法,简单的将两个表进行关联:等价于(inner join)
先声明一个SQLiteQueryBuilder对象。
SQLiteQueryBuilder queryBuilder=new SQLiteQueryBuilder();
//设置需要关联的表
queryBuilder.setTables("tb1,tb2");
//添加表关联的条件:
queryBuilder.appendWhere(ta1.id=tb2.id);
//需要出现的列元素
String asColumnsToReturn[]={t1.title,t1.name,t2.age,address};
//排序条件
String strSortOrder="title ASC";
Cursor c=queryBuilder.query(db,asColumnsToReturn,null,null,null,null,strSortOrder);
0 0
- 对sqlite的使用做一下简单的汇总。
- 【SQLite】SQLite的简单使用
- SQLite的简单使用
- 简单SQLite的使用
- SQLite的简单使用
- SQLite的简单使用
- SQLite的简单使用
- Ubuntu下有几个C/C++的IDE,现在来对做一下简单的比较
- 对Android sqlite数据库的简单熟悉
- SQLite的shell简单使用
- 简单的Android Sqlite 使用
- 安卓中SQLite的简单使用
- SQLite数据库的简单使用
- sqlite数据库的简单使用
- SQLite数据库的简单使用
- Android SQLite 的简单使用
- Sqlite的工具汇总
- sqlite的使用方法汇总
- 加速Android Studio的Gradle构建速度
- XStream使用总结
- SecureCRT乱码问题解决方法
- Maven常见问题
- HFC网络管理系统
- 对sqlite的使用做一下简单的汇总。
- 让网页中的Java Script代码自动执行的三种方法
- svn资源同步问题
- 伟哥教您Windows下手动搭建Laravel5.2开发环境Nginx+Php+MySQL
- Files 的值“ < < < < < < < .mine”无效。路径中具有非法字符。
- c++中的string常用函数用法总结
- Nginx的upstream目前支持5种方式的分配
- 机器学习实战之树回归
- Jtellij for mac 方法调用树