设为首页 收藏本站
查看: 848|回复: 0

[经验分享] Android SQLite数据库操作实例

[复制链接]

尚未签到

发表于 2016-11-30 09:43:44 | 显示全部楼层 |阅读模式
       Android的自带数据库SQLite小巧且功能强大,Android提供了两种方式去操作数据库,第一种是用SQL语句去操作数据,SQLite支持标准的SQL,其分页等操作与Mysql一样,以下是利用SQL操作SQLite:
  


import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class PersonDaoClassic {
private DBOpenHelper helper;
public PersonDaoClassic(Context context) {
helper = new DBOpenHelper(context);
}
public void insert(Person p) {
// 打开可写数据库
SQLiteDatabase db = helper.getWritableDatabase();
// 执行SQL语句, 替换占位符
db.execSQL("INSERT INTO person(name, balance) VALUES(?, ?)", new Object[] { p.getName(), p.getBalance() });
// 释放资源
db.close();
}
public void delete(int id) {
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("DELETE FROM person WHERE id=?", new Object[] { id });
db.close();
}
public void update(Person p) {
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) {
SQLiteDatabase db = helper.getReadableDatabase();
// 执行原始查询, 得到一个Cursor(类似ResultSet)
Cursor c = db.rawQuery("SELECT name, balance FROM person WHERE id=?", new String[] { String.valueOf(id) });
Person p = null;
// 判断Cursor是否有下一条记录
if (c.moveToNext())
// 从Cursor中获取数据, 创建Person对象
p = new Person(id, c.getString(0), c.getInt(1));
// 释放资源
c.close();
db.close();
return p;
}
public List<Person> queryAll() {
SQLiteDatabase db = helper.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;
}
public List<Person> queryPage(int pageNum, int capacity) {
// 开始索引
String start = String.valueOf((pageNum - 1) * capacity);
// 查询的个数
String length = String.valueOf(capacity);
SQLiteDatabase db = helper.getReadableDatabase();
// 翻页查询语句, 和MySQL中相同
Cursor c = db.rawQuery("SELECT id, name, balance FROM person LIMIT ?,?", new String[]{start, length});
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;
}
public int queryCount() {
SQLiteDatabase db = helper.getReadableDatabase();
// 查询记录条数
Cursor c = db.rawQuery("SELECT COUNT(*) FROM person", null);
c.moveToNext();
int count =c.getInt(0);
c.close();
db.close();
return count;
}
}
        除上述方法以外,android还给我们带来了另外一种更加简单,也是android推荐使用的一种方式,此种方式把数据封装在ContentValues中,因为android编程过程中经常会使用到已经封装好了数据的ContentValues,所以使用第二种方式在有些时候更加便捷,以下是代码:
  


package cn.itcast.sqlite;
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 DBOpenHelper helper;
public PersonDao(Context context) {
helper = new DBOpenHelper(context);
}
public void remit(int from, int to, int amount) {
SQLiteDatabase db = helper.getWritableDatabase();
// 开启事务
db.beginTransaction();
try {
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();
} catch (Exception e) {
e.printStackTrace();
}
// 结束事务, 将事务成功点前面的代码提交
db.endTransaction();
db.close();
}
public void insert(Person p) {
SQLiteDatabase db = helper.getWritableDatabase();
// 准备数据
ContentValues values = new ContentValues();
values.put("name", p.getName());
values.put("balance", p.getBalance());
// 通过ContentValues中的数据拼接SQL语句, 执行插入操作, id为表中的一个列名
db.insert("person", "id", values);
db.close();
}
public void delete(int id) {
SQLiteDatabase db = helper.getWritableDatabase();
// 执行删除操作, 在person表中删除id为指定值的记录
db.delete("person", "id=?", new String[]{String.valueOf(id)});
db.close();
}
public void update(Person p) {
SQLiteDatabase db = helper.getWritableDatabase();
// 要更新的数据
ContentValues values = new ContentValues();
values.put("name", p.getName());
values.put("balance", p.getBalance());
// 更新person表中id为指定值的记录
db.update("person", values, "id=?", new String[] { String.valueOf(p.getId()) });
db.close();
}
public Person query(int id) {
SQLiteDatabase db = helper.getReadableDatabase();
// 执行查询: 不去重复, 表是person, 查询name和balance两列, Where条件是"id=?", 占位符是id, 不分组, 没有having, 不排序, 没有分页
Cursor c = db.query(false, "person", new String[]{"name", "balance"}, "id=?", new String[]{String.valueOf(id)}, null, null, null, null);
Person p = null;
// 判断Cursor是否有下一条记录
if (c.moveToNext())
// 从Cursor中获取数据, 创建Person对象
p = new Person(id, c.getString(0), c.getInt(1));
// 释放资源
c.close();
db.close();
return p;
}
public List<Person> queryAll() {
SQLiteDatabase db = helper.getReadableDatabase();
// 查询所有记录, 倒序
Cursor c = db.query(false, "person", new String[]{"id","name", "balance"}, null, null, null, null, "id DESC", 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;
}
public List<Person> queryPage(int pageNum, int capacity) {
// 开始索引
String start = String.valueOf((pageNum - 1) * capacity);
// 查询的个数
String length = String.valueOf(capacity);
SQLiteDatabase db = helper.getReadableDatabase();
// 翻页查询
Cursor c = db.query(false, "person", new String[]{"id","name", "balance"}, null, null, null, null, null, start + "," + length);
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;
}
public int queryCount() {
SQLiteDatabase db = helper.getReadableDatabase();
// 查询记录条数
Cursor c = db.query(false, "person", new String[]{"COUNT(*)"}, null, null, null, null, null, null);
c.moveToNext();
int count =c.getInt(0);
c.close();
db.close();
return count;
}
}

 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-307529-1-1.html 上篇帖子: 快速入门sqlite内存数据库,用sqlite构建一日志工具 下篇帖子: 一个简单的Android SQLIte ORM框架
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表