您的位置:首页 > 数据库

SQLite常见操作(增删改查)

2013-03-26 00:26 525 查看
package com.itheima.mysqlite;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBOpenHelper extends SQLiteOpenHelper {

/**
* 用来打开数据库的一个工具,其中有创建和升级的方法
* @param context
* @param name
* @param factory
* @param version
*/
public DBOpenHelper(Context context) {
super(context, "itheima", null, 3);
/*
* 参数1:上下文环境的对象,用来确定数据库存储位置
* 参数2:数据库文件的名字
* 参数3:用来创建结果集的工厂,null为使用默认的工厂
* 参数4:数据库的版本,从1开始
*/
}

@Override
public void onCreate(SQLiteDatabase db) {
System.out.println("onCreate");
db.execSQL("CREATE TABLE person(id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(20))");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
System.out.println("onUpgrade");
db.execSQL("ALTER TABLE person ADD balance INTEGER");
}
}


package com.itheima.mysqlite;

public class Person {
private Integer id;
private String name;
private Integer balance;

public Person() {
super();
}

public Person(String name, Integer balance) {
super();
this.name = name;
this.balance = balance;
}

public Person(Integer id, String name, Integer balance) {
super();
this.id = id;
this.name = name;
this.balance = balance;
}

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 Integer getBalance() {
return balance;
}

public void setBalance(Integer balance) {
this.balance = balance;
}

@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", balance=" + balance + "]";
}

}


//SQL语句操作方法

package com.itheima.mysqlite;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;

public class ClassicPersonDao {
private Context context;

public ClassicPersonDao(Context context) {
this.context = context;
}

public void insert(Person p){
DBOpenHelper helper = new DBOpenHelper(context);
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("INSERT INTO person(name, balance) VALUES(?, ?)", new Object[] { p.getName(), p.getBalance() });
db.close();
}
public void delete(int id){
DBOpenHelper helper = new DBOpenHelper(context);
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("DELETE FROM person WHERE id=?", new Object[]{id});
db.close();
}
public void update(Person p){
DBOpenHelper helper = new DBOpenHelper(context);
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("UPDATE person SET name=?, balance=? WHERE id=?", new Object[] {p.getName(), p.getBalance(), p.getId()});
db.close();
}
public Person query(int id){
DBOpenHelper helper = new DBOpenHelper(context);
SQLiteDatabase db = helper.getReadableDatabase();//如果数据库不可写,getReadableDatabase()方法可以执行
Cursor c = db.rawQuery("SELECT * FROM person WHERE id=? ", new String[]{ id + ""});

Person p = null;
if(c.moveToNext()){    //将结果集向后移动,并且返回是否成功
String name = c.getString(c.getColumnIndex("name"));
int balance = c.getInt(c.getColumnIndex("balance"));
p = new Person(name, balance);
}
return p;
}

public List<Person> queryAll(){
DBOpenHelper helper = new DBOpenHelper(context);
SQLiteDatabase db = helper.getReadableDatabase();//如果数据库不可写,getReadableDatabase()方法可以执行
Cursor c = db.rawQuery("SELECT id, name, balance FROM person",null);
List<Person> persons = new ArrayList<Person>();
while (c.moveToNext()){
persons.add(new Person(c.getInt(0), c.getString(1), c.getInt(2)));
}
c.close();
db.close();
return persons;
}

/**
* 分页查询  指定页数和每页容量
* @param pageNum 页码
* @param capacity 每页大小
* @return 指定页上的Person 集合
*/
public List<Person> queryPage(int pageNum, int capacity){
DBOpenHelper helper = new DBOpenHelper(context);
SQLiteDatabase db = helper.getReadableDatabase();
String offset = (pageNum - 1) * capacity + "";
String limit = capacity + "";
Cursor c = db.rawQuery("SELECT id, name, balance FROM person LIMIT ?,?",new String[]{offset , limit});
List<Person> persons = new ArrayList<Person>();
while (c.moveToNext()){
persons.add(new Person(c.getInt(0), c.getString(1), c.getInt(2)));
}
c.close();
db.close();
return persons;
}
/**
* 查询数据库中有多少条记录
* @return
*/
public int queryCount(){
DBOpenHelper helper = new DBOpenHelper(context);
SQLiteDatabase db = helper.getReadableDatabase();//如果数据库不可写,getReadableDatabase()方法可以执行
Cursor c = db.rawQuery("SELECT COUNT(*) FROM person",null);
c.moveToNext();
int count = c.getInt(0);
c.close();
db.close();
return count;
}
//事务操作
public void remit(int from, int to, int amount){
DBOpenHelper helper = new DBOpenHelper(context);
SQLiteDatabase db = helper.getReadableDatabase();
try {
db.beginTransaction();    //开启事物
db.execSQL("UPDATE person SET balance=balance-? WHERE id=?", new Object[]{amount, from});
db.execSQL("UPDATE person SET balance=balance+? WHERE id=?", new Object[]{amount, to});
db.setTransactionSuccessful();    //设置事物成功,设置成功之前的操作在事物结束的时候会被提交
} finally {
db.endTransaction();    //结束事物,如果不结束其会超时自动结束
db.close();
}
}
}


//另一种操作方法
package com.itheima.mysqlite;

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;

public class PersonDao {
private Context context;

public PersonDao(Context context) {
this.context = context;
}

public long insert(Person p){
DBOpenHelper helper = new DBOpenHelper(context);
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues values = new ContentValues();    //创建一个Map集合,用来装载要插入的数据
values.put("name", p.getName());
values.put("balance", p.getBalance());
long id = db.insert("person", "name", values);//第2个参数随便写一个列名就可以,在插入空记录时用来拼装SQL语句
db.close();
return id;
}
public void delete(int id){
DBOpenHelper helper = new DBOpenHelper(context);
SQLiteDatabase db = helper.getWritableDatabase();
int count = db.delete("person", "id=?", new String[]{ id + ""});     //删除,并且返回影响的记录数
db.close();
}
public int update(Person p){
DBOpenHelper helper = new DBOpenHelper(context);
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", p.getName());
values.put("balance", p.getBalance());
int count = db.update("person", values, "id=?", new String[]{p.getId()+""});

db.close();
return count;
}
public Person query(int id){
DBOpenHelper helper = new DBOpenHelper(context);
SQLiteDatabase db = helper.getReadableDatabase();//如果数据库不可写,getReadableDatabase()方法可以执行
Cursor c = db.query("person", new String[]{"name", "balance"}, "id=?", new String[]{id+""}, null, null, null);
Person p = null;
if(c.moveToNext()){    //将结果集向后移动,并且返回是否成功
String name = c.getString(c.getColumnIndex("name"));
int balance = c.getInt(c.getColumnIndex("balance"));
p = new Person(id, name, balance);
}
return p;
}

public List<Person> queryAll(){
DBOpenHelper helper = new DBOpenHelper(context);
SQLiteDatabase db = helper.getReadableDatabase();//如果数据库不可写,getReadableDatabase()方法可以执行
Cursor c = db.query("person", null, null, null, null, null, "balance DESC"); //递减查询所有
List<Person> persons = new ArrayList<Person>();
while (c.moveToNext()){
persons.add(new Person(c.getInt(0), c.getString(1), c.getInt(2)));
}
c.close();
db.close();
return persons;
}

/**
* 分页查询  指定页数和每页容量
* @param pageNum 页码
* @param capacity 每页大小
* @return 指定页上的Person 集合
*/
public List<Person> queryPage(int pageNum, int capacity){
DBOpenHelper helper = new DBOpenHelper(context);
SQLiteDatabase db = helper.getReadableDatabase();
String offset = (pageNum - 1) * capacity + "";
String limit = capacity + "";
Cursor c = db.query("person", null, null, null, null, null, null, offset + "," + limit);
List<Person> persons = new ArrayList<Person>();
while (c.moveToNext()){
persons.add(new Person(c.getInt(0), c.getString(1), c.getInt(2)));
}
c.close();
db.close();
return persons;
}
/**
* 查询数据库中有多少条记录
* @return
*/
public int queryCount(){
DBOpenHelper helper = new DBOpenHelper(context);
SQLiteDatabase db = helper.getReadableDatabase();//如果数据库不可写,getReadableDatabase()方法可以执行
Cursor c = db.query("person", new String[]{"COUNT(*)"}, null, null, null, null, null);
c.moveToNext();
int count = c.getInt(0);
c.close();
db.close();
return count;
}
//事务操作
public void remit(int from, int to, int amount){
DBOpenHelper helper = new DBOpenHelper(context);
SQLiteDatabase db = helper.getReadableDatabase();
try {
db.beginTransaction();    //开启事物
db.execSQL("UPDATE person SET balance=balance-? WHERE id=?", new Object[]{amount, from});
db.execSQL("UPDATE person SET balance=balance+? WHERE id=?", new Object[]{amount, to});
db.setTransactionSuccessful();    //设置事物成功,设置成功之前的操作在事物结束的时候会被提交
} finally {
db.endTransaction();    //结束事物,如果不结束其会超时自动结束
db.close();
}
}
}


package com.itheima.mysqlite;

import java.util.List;
import java.util.Random;

import android.test.AndroidTestCase;

public class DBTest extends AndroidTestCase {
public void testCreateDatabase(){
DBOpenHelper helper = new DBOpenHelper(getContext());
helper.getWritableDatabase(); // 获取数据库连接
/*
* 数据库不存在:创建数据库,执行onCreate()方法
* 数据库存在,版本没变:不执行任何方法
* 数据库存在,版本提升:执行onUpgrade()方法
*/
}
public void testInsert(){
PersonDao dao = new PersonDao(getContext());
dao.insert(new Person("insert", 9999));
}

public void testUpdate(){
PersonDao dao = new PersonDao(getContext());
System.out.println(dao.update(new Person(209,"李四",321)));
}

public void testDelete(){
PersonDao dao = new PersonDao(getContext());
dao.delete(208);
}

public void testQuery(){
PersonDao dao = new PersonDao(getContext());
System.out.println(dao.query(234));
System.out.println(dao.query(2));
System.out.println(dao.query(302));
}

public void testQueryAll(){
PersonDao dao = new PersonDao(getContext());
List<Person> persons = dao.queryAll();
for(Person p: persons){
System.out.println(p);
}
}

public void testQueryPage(){
PersonDao dao = new PersonDao(getContext());
List<Person> persons = dao.queryPage(2,20);
for(Person p: persons){
System.out.println(p);
}
}

public void testQueryCount(){
PersonDao dao = new PersonDao(getContext());
System.out.println(dao.queryCount());
}

public void testRemit(){
PersonDao dao = new PersonDao(getContext());
dao.remit(209,208,100);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: