Android SQLite数据库
1,SQLite介绍
在Android平台上,集成了一个嵌入式关系型数据库——SQLite,SQLite3支持NULL、INTEGER、REAL(浮点数字)、 TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但实际上sqlite3也接受varchar(n)、 char(n)、decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型。 SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么。例如:可以在Integer类型的字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放日期型值。 但有一种情况例外:定义为INTEGER PRIMARY KEY的字段只能存储64位整数, 当向这种字段保存除整数以外的数据时,将会产生错误。 另外,在编写CREATE TABLE 语句时,你可以省略跟在字段名称后面的数据类型信息,如下面语句你可以省略name字段的类型信息:CREATE TABLE person (personid integer primary key autoincrement, name varchar(20))。
2.SQLite几大语句
查询语句:select * from 表名 where 条件子句 group by 分组字句 having ... order by 排序子句
如: select * from person
select * from person order by id desc
select name from person group by name having count(*)>1
分页SQL与mysql类似,下面SQL语句获取5条记录,跳过前面3条记录
select * from Account limit 5 offset 3 或者 select * from Account limit 3,5
插入语句:insert into 表名(字段列表) values(值列表)。如: insert into person(name, age) values(‘传智',3)
更新语句:update 表名 set 字段名=值 where 条件子句。如:update person set name=‘传智‘ where id=10
删除语句:delete from 表名 where 条件子句。如:delete from person where id=10
3.代码(工具类)
1 /** 2 * 3 * @ClassName: DataBaseOpenHelper 4 * @Description: 数据库工具类 5 * @author lhy 6 * @date 2014-10-9 下午2:36:41 7 * 8 */ 9 public class DataBaseOpenHelper extends SQLiteOpenHelper { 10 private static Map<String, DataBaseOpenHelper> dbMaps = new HashMap<String, DataBaseOpenHelper>(); 11 private OnSqliteUpdateListener onSqliteUpdateListener; 12 /** 13 * 建表语句列表 14 */ 15 private List<String> createTableList; 16 private String nowDbName; 17 18 private DataBaseOpenHelper(Context context, String dbName, int dbVersion, List<String> tableSqls) { 19 super(context, dbName, null, dbVersion); 20 nowDbName = dbName; 21 createTableList = new ArrayList<String>(); 22 createTableList.addAll(tableSqls); 23 } 24 25 /** 26 * 27 * @Title: getInstance 28 * @Description: 获取数据库实例 29 * @param @param context 30 * @param @param userId 31 * @param @return 32 * @return DataBaseOpenHelper 33 * @author lihy 34 */ 35 public static DataBaseOpenHelper getInstance(Context context, String dbName, int dbVersion, List<String> tableSqls) { 36 DataBaseOpenHelper dataBaseOpenHelper = dbMaps.get(dbName); 37 if (dataBaseOpenHelper == null) { 38 dataBaseOpenHelper = new DataBaseOpenHelper(context, dbName, dbVersion, tableSqls); 39 } 40 dbMaps.put(dbName, dataBaseOpenHelper); 41 return dataBaseOpenHelper; 42 }; 43 44 @Override 45 public void onCreate(SQLiteDatabase db) { 46 for (String sqlString : createTableList) { 47 db.execSQL(sqlString); 48 } 49 } 50 51 /** 52 * 53 * @Title: execSQL 54 * @Description: Sql写入 55 * @param @param sql 56 * @param @param bindArgs 57 * @return void 58 * @author lihy 59 */ 60 public void execSQL(String sql, Object[] bindArgs) { 61 DataBaseOpenHelper dataBaseOpenHelper = dbMaps.get(nowDbName); 62 synchronized (dataBaseOpenHelper) { 63 SQLiteDatabase database = dataBaseOpenHelper.getWritableDatabase(); 64 database.execSQL(sql, bindArgs); 65 } 66 } 67 68 /** 69 * 70 * @Title: rawQuery 71 * @Description: 72 * @param @param sql查询 73 * @param @param bindArgs 74 * @param @return 75 * @return Cursor 76 * @author lihy 77 */ 78 public Cursor rawQuery(String sql, String[] bindArgs) { 79 DataBaseOpenHelper dataBaseOpenHelper = dbMaps.get(nowDbName); 80 synchronized (dataBaseOpenHelper) { 81 SQLiteDatabase database = dataBaseOpenHelper.getReadableDatabase(); 82 Cursor cursor = database.rawQuery(sql, bindArgs); 83 return cursor; 84 } 85 } 86 87 /** 88 * 89 * @Title: insert 90 * @Description: 插入数据 91 * @param @param table 92 * @param @param contentValues 设定文件 93 * @return void 返回类型 94 * @author lihy 95 * @throws 96 */ 97 public void insert(String table, ContentValues contentValues) { 98 DataBaseOpenHelper dataBaseOpenHelper = dbMaps.get(nowDbName); 99 synchronized (dataBaseOpenHelper) { 100 SQLiteDatabase database = dataBaseOpenHelper.getWritableDatabase(); 101 database.insert(table, null, contentValues); 102 } 103 } 104 105 /** 106 * 107 * @Title: update 108 * @Description: 更新 109 * @param @param table 110 * @param @param values 111 * @param @param whereClause 112 * @param @param whereArgs 设定文件 113 * @return void 返回类型 114 * @throws 115 */ 116 public void update(String table, ContentValues values, String whereClause, String[] whereArgs) { 117 DataBaseOpenHelper dataBaseOpenHelper = dbMaps.get(nowDbName); 118 synchronized (dataBaseOpenHelper) { 119 SQLiteDatabase database = dataBaseOpenHelper.getWritableDatabase(); 120 database.update(table, values, whereClause, whereArgs); 121 } 122 } 123 /** 124 * 125 * @Title: delete 126 * @Description:删除 127 * @param @param table 128 * @param @param whereClause 129 * @param @param whereArgs 130 * @return void 131 * @author lihy 132 */ 133 public void delete(String table, String whereClause, String[] whereArgs) { 134 DataBaseOpenHelper dataBaseOpenHelper = dbMaps.get(nowDbName); 135 synchronized (dataBaseOpenHelper) { 136 SQLiteDatabase database = dataBaseOpenHelper.getWritableDatabase(); 137 database.delete(table, whereClause, whereArgs); 138 } 139 } 140 141 /** 142 * 143 * @Title: query 144 * @Description: 查 145 * @param @param table 146 * @param @param columns 147 * @param @param selection 148 * @param @param selectionArgs 149 * @param @param groupBy 150 * @param @param having 151 * @param @param orderBy 152 * @return void 153 * @author lihy 154 */ 155 public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, 156 String orderBy) { 157 DataBaseOpenHelper dataBaseOpenHelper = dbMaps.get(nowDbName); 158 synchronized (dataBaseOpenHelper) { 159 SQLiteDatabase database = dataBaseOpenHelper.getReadableDatabase(); 160 // Cursor cursor = database.rawQuery("select * from " 161 // + TableName.TABLE_NAME_USER + " where userId =" + userId, null); 162 Cursor cursor = database.query(table, columns, selection, selectionArgs, groupBy, having, orderBy); 163 return cursor; 164 } 165 } 166 /** 167 * 168 * @Description:查 169 * @param table 170 * @param columns 171 * @param selection 172 * @param selectionArgs 173 * @param groupBy 174 * @param having 175 * @param orderBy 176 * @param limit 177 * @return 178 * Cursor 179 * @exception: 180 * @author: lihy 181 * @time:2015-4-3 上午9:37:29 182 */ 183 public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, 184 String orderBy,String limit) { 185 DataBaseOpenHelper dataBaseOpenHelper = dbMaps.get(nowDbName); 186 synchronized (dataBaseOpenHelper) { 187 SQLiteDatabase database = dataBaseOpenHelper.getReadableDatabase(); 188 // Cursor cursor = database.rawQuery("select * from " 189 // + TableName.TABLE_NAME_USER + " where userId =" + userId, null); 190 Cursor cursor = database.query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit); 191 return cursor; 192 } 193 } 194 195 /** 196 * 197 * @Description 查询,方法重载,table表名,sqlString条件 198 * @param @return 199 * @return Cursor 200 * @author lihy 201 */ 202 public Cursor query(String tableName, String sqlString) { 203 DataBaseOpenHelper dataBaseOpenHelper = dbMaps.get(nowDbName); 204 synchronized (dataBaseOpenHelper) { 205 SQLiteDatabase database = dataBaseOpenHelper.getReadableDatabase(); 206 Cursor cursor = database.rawQuery("select * from " + tableName + " " + sqlString, null); 207 208 return cursor; 209 } 210 } 211 212 /** 213 * @see android.database.sqlite.SQLiteOpenHelper#close() 214 */ 215 public void clear() { 216 DataBaseOpenHelper dataBaseOpenHelper = dbMaps.get(nowDbName); 217 dataBaseOpenHelper.close(); 218 dbMaps.remove(dataBaseOpenHelper); 219 } 220 221 /** 222 * onUpgrade()方法在数据库版本每次发生变化时都会把用户手机上的数据库表删除,然后再重新创建。<br/> 223 * 一般在实际项目中是不能这样做的,正确的做法是在更新数据库表结构时,还要考虑用户存放于数据库中的数据不会丢失,从版本几更新到版本几。(非 224 * Javadoc) 225 * 226 * @see android.database.sqlite.SQLiteOpenHelper#onUpgrade(android.database.sqlite 227 * .SQLiteDatabase, int, int) 228 */ 229 @Override 230 public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) { 231 if (onSqliteUpdateListener != null) { 232 onSqliteUpdateListener.onSqliteUpdateListener(db, arg1, arg2); 233 } 234 } 235 236 public void setOnSqliteUpdateListener(OnSqliteUpdateListener onSqliteUpdateListener) { 237 this.onSqliteUpdateListener = onSqliteUpdateListener; 238 } 239 }