最近项目又用到了 数据库的操作,刚好把以前的拿来总结一下,也顺便帮助别人能够快速使用,代码片段全部都贴出来,
// 第一次使用软件自动 创建数据库 继承工具类 SQLiteOpenHelper
// 调用 SQLiteOpenHelper.getwritableDatabase(); 就执行创建方法
public class DBhelper extends SQLiteOpenHelper{
public DBhelper(Context context) {
super(context,
"lilei", //数据库的名字
null , //游标 null 为使用系统默认的 游标工厂产出游标对象
1 //数据库文件版本号 不能为0 。
);
}
@Override //数据库第一次被创建的时候调用
public void onCreate(SQLiteDatabase db) { //SQLiteDatabase封装了对数据库所有的操作
db.execSQL("create table if not exists info" +
"(id integer primary key autoincrement , name varchar(20))");
//如果要创建多张表就继续
//db.execSQL("create table info1 (id integer primary key autoincrement, name vachar(50),money int)");
}
@Override //当上面的 版本号 变更时 调用这个函数 额外添加
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table if exists info");
//db.execSQL("alter table ll add age varchar(20) null");
}
}
然后就是对数据库操作的类了。
public class SQLHandle {
private DBhelper dbh;
public SQLHandle(Context c){
this.dbh=new DBhelper(c);
}
//设置事物 提交
public void shiwu(){
SQLiteDatabase db= dbh.getWritableDatabase();
try{
db.beginTransaction();
/
db.setTransactionSuccessful();
}finally{
db.endTransaction(); // 回滚
}
}
// public Cursor query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy,String limit);
// 各个参数的意义说明:
// table:表名称
// columns:列名称数组
// selection:条件字句,相当于where
// selectionArgs:条件字句,参数数组
// groupBy:分组列
// having:分组条件
// orderBy:排序列
// limit:分页查询限制
// Cursor:返回值,相当于结果集ResultSet
// getCount() 获得总的数据项数
// isFirst() 判断是否第一条记录
// isLast() 判断是否最后一条记录
// moveToFirst() 移动到第一条记录
// moveToLast() 移动到最后一条记录
// move(int offset) 移动到指定记录
// moveToNext() 移动到下一条记录
// moveToPrevious() 移动到上一条记录
// getColumnIndexOrThrow(String columnName) 根据列名称获得列索引
// getInt(int columnIndex) 获得指定列索引的int类型值
// getString(int columnIndex) 获得指定列缩影的String类型值
/** 查询 **/
public void find(String id){
//SQLiteDatabase db= dbh.getReadableDatabase();
// getWritableDatabase() 首先调用 writeable 方法
// 比如存储空间磁盘满了 不成功的情况下 只能读
SQLiteDatabase db= dbh.getWritableDatabase();
//1.返回cursor对象 -----ResultSet
Cursor cu=db.rawQuery("select * from where id=?",
new String[]{id});
if(cu.moveToFirst()){
cu.getInt(cu.getColumnIndex("id"));
cu.getString(cu.getColumnIndex("name"));
cu.getString(cu.getColumnIndex("age"));
}
//2.
Cursor cu1=db.query("ll", //表名
new String[]{"id","name","age"}, //要获取的字段值 null 为查询所有字段
"id=?", // where
new String[]{"1212"}, // where 条件 =
null, //groupBy
null, //having
null); //orderBy
if(cu1.moveToFirst()){
cu1.getInt(cu1.getColumnIndex("id"));
cu1.getString(cu1.getColumnIndex("name"));
cu1.getString(cu1.getColumnIndex("age"));
}
//用完记得关闭
cu.close();
db.close();
}
/*** 插入 ***/
public void insert(String name, String age){
SQLiteDatabase sqld=dbh.getWritableDatabase();
// 缓存特点 sqld1 和 sqld 指向的是同1个实例
//SQLiteDatabase sqld1=dbh.getWritableDatabase();
sqld.execSQL("insert into ll (name,age,sex) values (?,?,?)",
new Object[]{name,age});
//2
ContentValues value=new ContentValues();
value.put("id", 10);
value.put("name", "455");
value.put("age", 20);
sqld.insert("ll", null, value);
sqld.insert("ll", "id", null);// 第2参数 空值字段
//有特殊处理 主键 null值 自动增长
sqld.close();
}
/*** 更新 ***/
public void update(String id,String name,String age){
SQLiteDatabase sqld=dbh.getWritableDatabase();
//1
sqld.execSQL("update ll set name=?,age=? where id=? ",
new Object[]{id,name,age});
//2
// 调用SQLiteDatabase的update(String table,ContentValues values,String whereClause, String[] whereArgs)方法。
// 参数是表名称,参数是更行列ContentValues类型的键值对(Map),参数是更新条件(where字句),参数是更新条件数组。
ContentValues value=new ContentValues();
value.put("id", 10);
value.put("name", "455");
value.put("age", 20);
sqld.update("ll", value, "id=?", new String[]{"201"});
//用完记得关闭
sqld.close();
}
/** 删除 **/
public void delete(String id){
SQLiteDatabase sqld=dbh.getWritableDatabase();
//1
sqld.execSQL("delete from ll where id=?",
new Object[]{id});
//2.
// 调用SQLiteDatabase的delete(String table,String whereClause,String[] whereArgs)方法,
// 参数一是表名称,参数二是删除条件,参数三是删除条件值数组;
sqld.delete("ll", "id=?", new String[]{"dsds"});
//用完记得关闭
sqld.close();
}
/** 删除指定数据库 **/
private void drop(SQLiteDatabase db){
/
//删除表的SQL语句
String sql ="DROP TABLE stu_table";
//执行SQL
db.execSQL(sql);
}
//分页
public List<Vector> getScollDate(int offset,int maxResult){
SQLiteDatabase db= dbh.getWritableDatabase();
//1
Cursor cu=db.rawQuery("select * from ll order by " +
"id asc " +
"limit ?,?",
new String[]{String.valueOf(offset),String.valueOf(maxResult)});
Vector vs=new Vector();
//得到多条结果集
while(cu.moveToNext()){
Vector v=new Vector();
int id=cu.getInt(cu.getColumnIndex("id"));
String name=cu.getString(cu.getColumnIndex("name"));
String age=cu.getString(cu.getColumnIndex("age"));
v.add(id);
v.add(name);
v.add(age);
vs.add(v);
//2.
db.query("ll", //table
null, //colument
null,
null,
null,
null, //having
"id asc", //orderBy
offset+","+maxResult);
}
//关闭数据库
cu.close();
db.close();
return vs;
}
//记录总数
public long getCount(){
SQLiteDatabase db= dbh.getWritableDatabase();
Cursor cu=db.rawQuery("select count(*) from ll",null);
//最后也会有1条数据 写0
cu.moveToFirst();
long l=cu.getLong(0);
// ------------- 2
Cursor c1=db.query("ll", new String[]{"count(*)"}, null, null, null, null, null);
/
return l;
}
}
当然,个人还是觉得用 sql 比较方便,因为大家肯定都是多多少少接触过数据库的