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;
}
}
分享到:
相关推荐
Android之Sqlite数据库操作实例
Android SQLite 增、删、查、改操作源码
Android SQLite数据库相关实例源码,代码中的每一个intent都会带一个Bundle型的extras数据。需要对position和id进行一个很好的区分。position指的是点击的这个ViewItem在当前ListView中的位置,每一个和ViewItem绑定...
Android 操作SQLite数据库实例
Android 绿豆通讯录( SQLite数据库 + ListView数据展示控件 ) https://blog.csdn.net/weixin_44949135/article/details/106029404 采用 SQLite数据库 + ListView数据展示控件,可将用户添加的所有信息,分条...
本源码提供了android 平台操作sqlite 数据库的完整源码实例。包括数据库的创建、更新,表的创建、删除,数据的插入、修改、删除、查询。
android SQLite数据库的增删改实例,理解了以后数据库操作只不过换换表名属性就OK了!
一款android数据库操作的例子,附带源代码
在Android中,可供选择的存储方式有SharedPreferences、文件存储、SQLite数据库方式、内容提供器(Content provider)和网络。一.SharedPreferences方式二.文件存储方式三.SQLite数据库方式四.内容提供器(Content ...
资源名称:android中sqlite数据库的创建以及增删改查 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
Android为了操作SQlite数据库,提供了SQLiteDatabase类,其内封装了insert 、delete、update 、query 、执行SQL命令等操作。同时又为SQLiteDatabase提供了一个辅助类,SQLiteOpenHelper。它提供了两个重要的方法,...
android SQLite 实例 数据库操作demo
这是一个比较完整的类淘宝应用,使用sqlite数据库展示商品并控制购物车和历史记录,可直接运行代码看到效果
android sqlite android本地数据库增删查改 经典例子,简单实有
一个简单的基于Android的Sqlite数据库的操作封装,它有如下的好处:便捷地创建表和增添表字段灵活的数据类型处理通过操作对象来insert或者update表记录支持多种查询方式,支持多表自定义的复杂查询,支持分页查询支持...
轻量的 Android SQLite 数据库工具集合, 适合用SQLite做一些数据存储的项目. 根据Java实体自动生成数据库表. 不需要书写任何SQL语句即可实现对数据库的 创表 增 删 查 改 分页 操作. 所有的操作方法都是静态的...
对于这样的问题,解决的办法就是keep single sqlite connection,保持单个SqliteOpenHelper实例,同时对所有数据库操作的方法添加synchronized关键字。完美解决sqlite的 database locked 或者是 error 5: database ...
本文实例讲述了Android SQLite数据库操作方法。分享给大家供大家参考,具体如下: SQLite and Android SQLite简介 SQLite是一个非常流行的嵌入式数据库,它支持SQL语言,并且只利用很少的内存就有很好的性能。此外,...