创建和打开数据库¶
//1.创建和打开一个数据库可以使用openOrCreateDatabase方法来实现(如果存在就打开,如果不存在就创建一个数据库)
//2.创建成功后返回一个SQLiteDatabase对象,否则抛出异常FileNotFoundException
/*3.参数 (String DATABASE_NAME 数据库的名字,
Int MODE 操作模式 Context.MODE_PRIVATE 等,
CursorFactory指定在执行查询时获得一个游标实例的工厂类。 设置为null,则使用系统默认的工厂类)*/
SQLiteDatabase mSQLiteDatabase = this.openOrCreateDatabase("myDB.db",MODE_PRIVATE,null);
删除数据库
this.deleteDatabase();
关闭数据库
使用完数据库必须要关闭。
mSQLiteDatabase.close();
创建表
一个数据库可以包含多个表。
SQLite 3 数据类型
TEXT 文本 NUMERIC 数值 INTEGER 整型 REAL 小数 NONE 无类型
1.创建表可以通过execSQL方法执行一条SQL语句。
2.创建一张名为table1且包含3个字段的表
String createTable = "create table table1(
_id integer primary key,
num integer,
data text)";
mSQLiteDatebase.execSQL(createTable);
删除指定表
mSQLiteDatabase.execSQL("drop table table1");
向表中添加一条数据
1.使用insert和ContentValues插入数据
使用insert方法来添加数据,但是insert方法要求把数据都打包到ContentValues中。 ContentValues其实就是一个Map,Key值是字段名称,Value值是字段的值。 通过ContentValues的put方法可以把数据放入ContentValues中,然后插入表。
ContentValues cv = new ContentValues();
//存储数据
cv.put("num",1);
cv.put("data","测试数据库数据");
//插入数据到表table1
//参数 (表名,nullColumnHack 和所有字段都是空的记录有关系,ContentValues数据)
mSQLiteDatabase.insert("table1",null,cv);
2.使用SQL语句插入数据
String insertSQL = "insert into table1(_id,num,data) values(1,1,'通过SQL插入数据')";
mSQLiteDatabase.execSQL(insertSQL);
修改表中的数据
1.使用update和ContentValues更新数据
ContentValues cv = new ContentValues();
//存储修改的数据
cv.put("num",2);
cv.put("data","修改后的数据");
//更新数据
//参数String table 表名, String whereClause 查询语句, String[] whereArgs 参选语句使用问号的替代参数
mSQLiteDatabase.update("table1",cv,"_id="+1,null);
2.使用SQL语句更新数据
String updateSQL = "update tbale1 set num = 2,data = '修改后的数据' where _id = 1";
mSQLiteDatabase.execSQL(updateSQL);
删除表中的数据
1.使用delete删除数据
//参数String table 表名, String whereClause 查询语句, String[] whereArgs 参选语句使用问号的替代参数
mSQLiteDatabase.delete("table1","where _id="+0,null);
2.使用SQL语句删除
String deleteSQL = "delete from table1 where _id=1";
mSQLiteDatabase.execSQL(deleteSQL);
查询数据
查询数据是通过Cursor类来实现的。当使用SQLiteDatabase.query()方法时,返回会得到一个Cursor对象,Cursor指向的就是每一条数据。
1.query查询
public Cursor query (String table, String columns, String selection, String selectionArgs, String groupBy, String having, String orderBy)
table: 表名称,不可为null
columns: 要返回的列名数组,置null表示返回所有列
selection: where子句,如果不需要where子句则置null,写法如"id=?",此处将要填的参数写为?,供下方的selectionArgs填充
selectionArgs: where子句的所需值,该数组将依次填充selection中的每一个问号。
groupby: GroupBy子句
having: Having子句
orderBy: order by 子句
Cursor cur = mSQLiteDatabase.query("table1",new String[]{"_id","num","data"},null,null,null,null,null);
2.SQL查询
//String SQL查询语句, String[] whereArgs 参选语句使用问号的替代参数
Cursor cur = mSQLiteDatabase.rawQuery("select * from table1",null);
if(cur != null){
if(cur.moveToFirst()){
do{
//得到num索引
int numColumn = cur.getColumnIndex("num");
//得到数据
int num = cur.getInt(numColumn);
String data = cur.getString(c.getColumnIndex("data")
}while(cur.moveToNext)
}
}
Cursor常用方法
move 以当前位置为参考,将Cursor移动到指定的位置,成功返回true,失败返回false
moveToPosition 将Cursor移动到指定的位置,成功返回true,失败返回false
moveToNext 将Cursor向前移动一个位置,成功返回true,失败返回false
moveToLast 将Cursor向后移动一个位置,成功返回true,失败返回false
moveToFirst 将Cursor移动到第一行,成功返回true,失败返回false
isBeforeFirst 返回Cursor是否指向第一项数据之前
isAfterLast 返回Cursor是否指向最后一项数据之后
isClosed 返回Cursor是否关闭
isFirst 返回Cursor是否指向第一项数据
isLate 返回Cursor是否指向最后一项数据
isNull 返回指定位置的值是否为Null
getCount 返回总的数据项数
getInt 返回当前行中指定索引的数据
查看文件
data/data/项目名/databases/myDB.db