平时工作中是真没有接触SQLite本地数据库,然后在学习过程中,看序列化的时候(其实后来发现和序列化并没有半毛钱关系,很尴尬),突然想到了数据库这个东西,很久不用基本上忘的没有了,所以就写个demo总结一下使用。
对于SQLite语句不熟悉的,可以使用数据库工具来练习一下
传送门:数据库工具SQLite Expert Personal的简单使用
如何在Android中简单使用SQLite数据库?我们只需要写两个工具类来使用操作就可以了
- 创建数据库的帮助类 —— DBHelper
我们创建一个DBHelper去继承SQLiteOpenHelper,然后实现onCreate和onUpgrade即可,当然,构造函数不能忘掉。下面的代码中各部分的注释就标注的很清楚啦!
public class DBHelper extends SQLiteOpenHelper {
private static final int VERSION = 1;//定义数据库版本号
private static final String DBNAME = "ceshi.db"; //定义数据库名
public DBHelper(Context context) {//定义构造函数
//参数 上下文 数据库名称 cosor工厂 版本号
super(context, DBNAME, null, VERSION);//重写基类的构造函数
}
@Override
public void onCreate(SQLiteDatabase db) {//创建数据库
//序号,姓名,年龄,登记日期
db.execSQL("create table ceshi (id varchar(10) primary key, name varchar(200),age varchar(10),date varchar(10))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {//更新数据库
//本方法主要用于更新数据库 通过对当前版本的判断 实现数据库的更新
}
}
- 创建增删改查的工具类 —— CeshiDao
我这里只是简单的实现了数据库的增删改查功能
- 插入数据,这里使用replace而没有使用insert的原因是,我的表里的id字段建立了唯一索引,所以如果insert使用已经存在的键值插入一条记录,会抛出一 个主键冲突的错误,使用replace则会直接替换掉原来的数据。所以我使用了replace
/*插入*/
public void insertDao(Ceshi ceshi) {
db = helper.getWritableDatabase();//初始化SQLiteDatabase对象
//执行插入操作
db.execSQL("replace into ceshi (id,name,age,date) values (?,?,?,?)",
new Object[]{
ceshi.getId(),
ceshi.getName(),
ceshi.getAge(),
ceshi.getDate()
});
}
- 删除数据
/*删除*/
public void deleteDao(Integer... ids) {
if (ids.length > 0) {//判断是否存在要删除的id
StringBuffer sb = new StringBuffer();// 创建StringBuffer对象
for (int i = 0; i < ids.length; i++)// 遍历要删除的id集合
{
sb.append('?').append(',');// 将删除条件添加到StringBuffer对象中
}
sb.deleteCharAt(sb.length() - 1);// 去掉最后一个“,“字符
db = helper.getWritableDatabase();// 初始化SQLiteDatabase对象
// 执行删除收入信息操作
db.execSQL("delete from ceshi where id in (" + sb + ")",
(Object[]) ids);
}
}
- 更新修改数据
/*修改*/
public void updateDao(Ceshi ceshi) {
db = helper.getWritableDatabase();// 初始化SQLiteDatabase对象
// 执行修改收入信息操作
db.execSQL(
"update ceshi set name=?,age= ?,date=? where id= ?",
new Object[]{
ceshi.getName(),
ceshi.getAge(),
ceshi.getDate(),
ceshi.getId()
});
}
- 查询单个数据
/*查询*/
public Ceshi findDao(int id) {
db = helper.getWritableDatabase();// 初始化SQLiteDatabase对象
Cursor cursor = db
.rawQuery(
"select id,name,age,date from ceshi where id= ?",
new String[]{String.valueOf(id)});// 根据编号查找,并存储到Cursor类中
if (cursor.moveToNext())// 遍历查找到的收入信息
{
// 将遍历到的收入信息存储到Tb_inaccount类中
return new Ceshi(
cursor.getInt(cursor.getColumnIndex("id")),
cursor.getString(cursor.getColumnIndex("name")),
cursor.getInt(cursor.getColumnIndex("age")),
cursor.getLong(cursor.getColumnIndex("date"))
);
}
return null;
}
- 查询所有数据
/*获取所有数据*/
public List<Ceshi> getAllData() {
List<Ceshi> csList= new ArrayList<Ceshi>();// 创建集合对象
db = helper.getWritableDatabase();// 初始化SQLiteDatabase对象
// 获取所有收入信息
Cursor cursor = db.rawQuery("select * from ceshi", null);
while (cursor.moveToNext())// 遍历所有的收入信息
{
// 将遍历到的收入信息添加到集合中
csList.add(new Ceshi(
cursor.getInt(cursor.getColumnIndex("id")),
cursor.getString(cursor.getColumnIndex("name")),
cursor.getInt(cursor.getColumnIndex("age")),
cursor.getLong(cursor.getColumnIndex("date"))
));
}
return csList;// 返回集合
}
如果有不对的地方需要改正的,欢迎提出建议
欢迎关注我的Github:ContentMy
最后附上项目地址:SQLiteDemo