方法数据库android轻量型数据库sqlite的使用方法汇总
每日一贴,今天的内容关键字为方法数据库
声明:主要是对sqlite的使用做一下简单的汇总。
首先建立数据库和建立数据表
/**
* @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);
}
}
其次,为了方法建立一个bean来对应表中的内容:
/**
* @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());
}
}
再次:建立一个service类来处置业务逻辑(注意两种不同的操作方法使用sql的不同)
/**
* @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;
}
}
好了,总结就这么多了。
文章结束给大家分享下程序员的一些笑话语录:
面试官:熟悉哪种语言
应聘者:JAVA
面试官:知道什么叫类么
应聘者:我这人实在,工作努力,不知道什么叫累
面试官:知道什么是包?
应聘者:我这人实在 平常不带包 也不用公司准备了
面试官:知道什么是接口吗?
应聘者:我这个人工作认真。从来不找借口偷懒
面试官:知道什么是继承么
应聘者:我是孤儿没什么可以继承的
面试官:知道什么叫对象么?
应聘者:知道,不过我工作努力,上进心强,暂时还没有打算找对象。
面试官:知道多态么?
应聘者:知道,我很保守的。我认为让心爱的女人为了自已一时的快乐去堕胎是不道德的行为!请问这和C#有什么关系??

浙公网安备 33010602011771号