网站移动端建设,热门关键词,wordpress添加媒体无反应,seo项目培训SQLite是一种转为嵌入式设备设计的轻型数据库#xff0c;其只有五种数据类型#xff0c;分别是#xff1a; NULL#xff1a; 空值 INTEGER#xff1a; 整数 REAL#xff1a; 浮点数 TEXT#xff1a; 字符串 BLOB#xff1a; 大数据 在SQLite中#xff0c;并没有专门设…SQLite是一种转为嵌入式设备设计的轻型数据库其只有五种数据类型分别是 NULL 空值 INTEGER 整数 REAL 浮点数 TEXT 字符串 BLOB 大数据 在SQLite中并没有专门设计BOOLEAN和DATE类型因为BOOLEAN型可以用INTEGER的0和1代替true和false而DATE类型则可以拥有特定格式的TEXT、REAL和INTEGER的值来代替显示为了能方便的操作DATE类型SQLite提供了一组函数详见http://www.sqlite.org/lang_datefunc.html。这样简单的数据类型设计更加符合嵌入式设备的要求。关于SQLite的更多资料请参看http://www.sqlite.org/ 在Android系统中提供了android.database.sqlite包用于进行SQLite数据库的增、删、改、查工作。其主要方法如下 beginTransaction(): 开始一个事务。 close(): 关闭连接释放资源。 delete(String table, String whereClause, String[] whereArgs): 根据给定条件删除符合条件的记录。 endTransaction(): 结束一个事务。 execSQL(String sql): 执行给定SQL语句。 insert(String table, String nullColumnHack, ContentValues values): 根据给定条件插入一条记录。 openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory): 根据给定条件连接数据库如果此数据库不存在则创建。 query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy): 执行查询。 rawQuery(String sql, String[] selectionArgs): 根据给定SQL执行查询。 update(String table, ContentValues values, String whereClause, String[] whereArgs): 根据给定条件修改符合条件的记录。 除了上诉主要方法外Android还提供了诸多实用的方法总之一句话其实Android访问数据库是一件很方便的事儿。 一、 创建数据库 通过openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory)方法创建数据库。 1 SQLiteDatabase db this.openOrCreateDatabase(test_db.db, Context.MODE_PRIVATE, null);
2 SQLiteDatabase db2 SQLiteDatabase.openOrCreateDatabase(/data/data/com.test/databases/test_db2.db3, null); 如上两种方式均能创建数据库this.openOrCreateDatabase是对SQLiteDatabase.openOrCreateDatabase而来如代码所见原生的SQLiteDatabase.openOrCreateDatabase()方法第一参数要求输入绝对路劲而所有的数据库都是储存于“data/data/应用报名/databases”目录下所以输入完全的绝对路劲是一件重复且繁杂的工作。采用this.openOrCreateDatabase则省去了此操作。执行操作后的结果如下图 另外还可以通过写一个继承SQLiteOpenHelper类的方式创建数据库此种方式是一种更加进阶的创建方式所以在此不做描述。 二、创建数据表插入数据。 Android系统并没有提供特别的创建数据表的方法数据表通过SQL语句创建代码如下 1 db.execSQL(create table tab(_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL)); 表创建好之后通过insert(String table, String nullColumnHack, ContentValues values)方法插入数据其中参数含义分别为 table: 目标表名 nullColumnHack: 指定表中的某列列名。因为在SQLite中不允许不允许插入所有列均为null的记录因此初始值有值为空时此列需显式赋予null values: ContentValues对象类似于java中的Map。以键值对的方式保存数据。 数据插入代码如下 1 ContentValues values new ContentValues();
2 for(int i0;i10;i){
3 values.put(name, test i);
4 db.insert(tab, _id, values);
5 } 执行此操作后会新增一个名为“tab”的数据表利用SQLite客户端推荐SQLite Expert Personal 3可轻松查看此表结构和数据。如下图 三、修改数据 update(String table, ContentValues values, String whereClause, String[] whereArgs)方法用于修改数据其四个参数的具体含义如下 table: 目标表名 values: 要被修改成为的新值 whereClause: where子句除去where关键字剩下的部分其中可带占位符。如没有子句则为null。 whereArgs: 用于替代whereClause参数中占位符的参数。如不需传入参数则为null。 数据修改代码如下 1 ContentValues values new ContentValues();
2 values.put(name, name);
3 db.update(tab, values, _id1, null);
4 db.update(tab, values, _id?, new String[]{5}); 执行结果如下图_id1和_id5的数据name字段的值被修改为了“name”。 四、查询数据。 之前一直使用SQLite客户端查看数据情况了这里就使用android提供的query()和rowQuery()方法执行查询。具体代码如下 1 Cursor c db.query(tab, null, null, null, null, null, null);2 c.moveToFirst();3 while(!c.isAfterLast()){4 int index c.getColumnIndex(name);5 Log.d(SQLite, c.getString(index));6 c.moveToNext();7 }8 c db.rawQuery(select * from tab, null);9 c.moveToFirst();
10 while(!c.isAfterLast()){
11 int index c.getColumnIndex(name);
12 Log.d(SQLite, c.getString(index));
13 c.moveToNext();
14 } 查询结果如下图 可以清晰的在查询结果中红线上下的数据是完全一致的也就是说query和rawQuery方法在的不同仅仅在于所需参数的不同。rawQuery方法需要开发者手动写出查询SQL而query方法是由目标表名、where子句、order by子句、having子句等诸多子句由系统组成SQL语句。两方法同返回Cursor对象所以两方在使用时孰优孰劣就看具体情况了。本人更喜欢rawQuery的方式因为此方式更接近传统Java开发也可以由专业DBA来书写SQL语句这样更符合MVC的思想而且这样的代码可读性更高。query方法里面参数实在太多有点记不住谁是order by子句谁是having子句了 Cursor对象可以理解为游标对象凡是对数据有所了解的人相信对此对象都不会陌生在这里机不再累述。只提醒一点在第一次读取Cursor对象中的数据时一定要先移动游标否则此游标的位置在第一条记录之前会引发异常。 五、删除数据 删除数据也是一件很简单的事只需要调用delete方法传入参数即可delete(String table, String whereClause, String[] whereArgs)的参数三个参数具体含义如下 table: 目标表名 whereClause: where子句除去where关键字剩下的部分其中可带占位符。如没有子句则为null。 whereArgs: 用于替代whereClause参数中占位符的参数。如不需传入参数则为null。 具体代码如下 db.delete(tab, _id? or name?, new String[]{8, name}); 执行结果如下: 其中_id8和name‘name’的数据统统被删除了。 整个数据库的CRUD操作到此演示完了。最后提醒一点在操作完数据后一定要记得调用close()方法关闭连接释放资源。这个原因相信大家都是懂的。转载于:https://www.cnblogs.com/ansionchen/archive/2012/06/26/3019208.html