版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/true100/article/details/80817302
- 最近一直在处理项目中数据库相关功能,由于项目的特殊性,当本地数据库某张表的内容大小达到几百M时,查询数据变得让人无比崩溃:从几百万条数据中查询某一天的几万条数据,查询的时间让人等得实在是受不了。同时项目中在不停地往数据库中存入数据,也在定时的统计数据,加上数据库的备份与恢复等功能叠加在一起,处理起来还真有些费劲。这里只是记录一下数据库常用操作之外的例子。
- 项目中通常用到的数据库操作就是:
创建数据库:CREATE TABLE…,
插入数据到表格中:INSERT INTO ….,
查询数据表中数据:SELECT FROM…
删除数据表中数据:DELETE FROM…。
现在记录的是其它一些使用方法
前提是要获取到Android中的SQLiteDatabase 对象:
SQLiteDatabase db = openOrCreateDatabase("myTest.db", Context.MODE_PRIVATE, null);
1,代码中判断指定的数据表是否存在 :
public boolean checkTableExist(String tableName) {
boolean result = false;
String sql = "select count(*) as c from Sqlite_master where type ='table' and name ='" + tableName + "' ";
Cursor cursor = db.rawQuery(sql, null);
if (cursor.moveToNext()) {
int count = cursor.getInt(0);
if (count > 0) {
//如果数据大于0,表示对应地表存在
result = true;
}
}
cursor.close();
return result;
}
2,代码中获取当前数据库中所有数据表名称(当然其它信息也可以)
public List<String> queryAllTableNames() {
List<String> tableNameList = new ArrayList<>();
String sql = "select * from sqlite_master";
Cursor cursor = db.rawQuery(sql, null);
// LogUtil.e(Arrays.toString(cursor.getColumnNames()));
//cursor.getColumnNames()获取到的内容有:
//type: table对象类型,结果就是table。
//name: 数据表名称,如T_STUDENT。
//tbl_name:获取到的数据表名称,同上。
//rootpage:个人理解是表目录位置。
//sql:创建该表的SQL语句。
while (cursor.moveToNext()) {
//获取到数据库中所有的表格名称
String str = cursor.getString(cursor.getColumnIndex("name"));
tableNameList.add(str);
}
LogUtil.e("当前所有表:" + tableNameList.size() + "===:" + tableNameList.toString());
cursor.close();
return tableNameList;//返回的结果就是数据库中所有表格对应名称的集合
}
3,查找(删除)指定表中某(时间)范围数据
public void deleteDurationData(String startTime, String endTime) {
//删除用DELETE FROM,查询对应使用SELECT FROM
String sql = "delete from table_name where date between " + "'" + startTime + "'" + " and " + "'" + endTime + "'";
db.execSQL(sql);
}
4,查询大量数据时,为了更快速,可以创建索引:
db.execSQL("CREATE INDEX 索引名 ON 表名(字段1,字段2...)");
有关数据库的使用内容太多了,就不记录其它的了。