如何使用
- 继承SQLiteOpenHelper,通过SQLiteOpenHelper可以方便的管理SQLiteDatabase
public class MyDataBaseHelper extends SQLiteOpenHelper {
public final static String CREATE_TABLE_SQL="create table dict (_id integer primary key autoincrement,word text,detail text)";
public MyDataBaseHelper(Context context, String name, int version) {
super(context, name, null, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
// 第一次使用数据库是自动建表
db.execSQL(CREATE_TABLE_SQL);
}
/**
* 升级数据是调用
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
- 获取可写数据库:SQLiteDatabase database=databaseHelper.getWritableDatabase();
- 获取可读数据库: SQLiteDatabase db=databaseHelper.getReadableDatabase();
执行SQL语句
db.executeSQL(String sql);
db.executeSQL(String sql, Object[] bindArgs);//sql语句中使用占位符,然后第二个参数是实际的参数集
insert
db.insert(String table, String nullColumnHack, ContentValues values);
- 第一个参数都是表示要操作的表名;insert中的第二个参数表示强行插入null值的数据列的列名,当values参数为空或不含任何key-value对时该参数有效;insert中的第三个参数是ContentValues类型的变量,是键值对组成的Map,key代表列名,value代表该列要插入的值;插入方法执行后会返回新添记录的行号,该行号是一个内部值,与主键id无关,发生错误返回-1;
- 通过SQL语句也可实现:比如:db.execSQL("insert into news_info values(null,?,?)",new String[]{title,content})
update
db.update(String table, Contentvalues values, String whereClause, String whereArgs);
- table:表名
- values: 想更新的数据
- whereClause:满足whereClause子句的记录将会被更新
- whereArgs: 用于为whereClause子句传入参数
例
int result=db.update("news_info",values,"_id>?",new Integer[]{20});
delete
db.delete(String table, String whereClause, String whereArgs);
- table: 表名
- whereClause:满足whereClause子句的记录将会被删除
- whereArgs: 用于为whereClause子句传入参数
query
db.rawQuery(String sql, String[] selectionArgs);
db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy);
db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);
db.query(String distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderB
上面几种都是常用的查询方法,第一种最为简单,将所有的SQL语句都组织到一个字符串中,使用占位符代替实际参数,selectionArgs就是占位符实际参数集;下面的几种参数都很类似,columns表示要查询的列所有名称集,selection表示WHERE之后的条件语句,可以使用占位符,groupBy指定分组的列名,having指定分组条件,配合groupBy使用,orderBy指定排序的列名,limit指定分页参数,distinct可以指定“true”或“false”表示要不要过滤重复值。需要注意的是,selection、groupBy、having、orderBy、limit这几个参数中不包括“WHERE”、“GROUP BY”、“HAVING”、“ORDER BY”、“LIMIT”等SQL关键字。
最后,他们同时返回一个Cursor对象,代表数据集的游标,有点类似于JavaSE中的ResultSet。
Cursor
c.move(int offset); //以当前位置为参考,移动到指定行
c.moveToFirst(); //移动到第一行
c.moveToLast(); //移动到最后一行
c.moveToPosition(int position); //移动到指定行
c.moveToPrevious(); //移动到前一行
c.moveToNext(); //移动到下一行
c.isFirst(); //是否指向第一条
c.isLast(); //是否指向最后一条
c.isBeforeFirst(); //是否指向第一条之前
c.isAfterLast(); //是否指向最后一条之后
c.isNull(int columnIndex); //指定列是否为空(列基数为0)
c.isClosed(); //游标是否已关闭
c.getCount(); //总数据项数
c.getPosition(); //返回当前游标所指向的行数
c.getColumnIndex(String columnName);//返回某列名对应的列索引值
c.getString(int columnIndex); //返回当前行指定列的值