Android据库操作笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 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...)");

有关数据库的使用内容太多了,就不记录其它的了。

猜你喜欢

转载自blog.csdn.net/true100/article/details/80817302
今日推荐