Export to GitHub

androidlearn - SQLite.wiki


创建和打开数据库

//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.md columns, String selection, String.md 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