欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

android 数据库处理及操作 博客分类: android android数据库sd卡 

程序员文章站 2024-03-14 18:48:47
...

对于移动客户端来说,数据库肯定都是轻量级的,像sqlite ,今天做一个android下数据库操作的demo。

对于有数据库的应用,如果数据库包含在apk中,不进行处理的话,可能出现一种情况,随着数据记录的增加,应用会越来越大也就是说应用的大小是变化的。解决这个问题的方法是将数据库文件放到sd卡中。

1.在res目录下新建raw目录,将书库文件放到raw目录下

2.应用第一次使用时,将数据库文件写道sd卡中

(别忘了加

<!-- 操作sd卡权限 -->
 <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>

)

下面是代码片段:

public SQLiteDatabase openDatabase()
 {
  SQLiteDatabase database = null;
  //得到 sdk状态
  String sdState = android.os.Environment.getExternalStorageState();
  //表示sd卡已经挂载,并且拥有读写权限
  if(sdState.equals(android.os.Environment.MEDIA_MOUNTED))   
  {
   boolean b = false;
   File dir =  new File(PATH);
   //判断是否存在该目录 ,没有则创建
   if(!dir.exists())   
    b =  dir.mkdir();
   
   //sd卡上不存在db文件则将apk中的db资源文件(raw文件下的db文件)保存在sd卡指定的目录下
   String dbpath = PATH +"/"+DBNAME;
   if(b&&!new File(dbpath).exists())
   {
//    //得到输入流
    InputStream inputStream = activity.getResources().openRawResource(R.raw.testdb);
    //创建输出流
    try {
     FileOutputStream fileOutputStream = new FileOutputStream(dbpath);
     //将db文件写到sd卡
     byte[] bs = new byte[8192];
     int count = 0;
     while(((count=inputStream.read(bs)))>0)
     {
      fileOutputStream.write(bs,0,count);      
     }
     //关闭流
     inputStream.close();
     fileOutputStream.close();
     
    } catch (FileNotFoundException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
    
   }
   //得到SqliteDatabase 对象
   database = SQLiteDatabase.openOrCreateDatabase(dbpath, null);
   
  }
  return database;
 }

得到了SqliteDatabase对象之后,增删改查 就是小菜一碟了

SqliteDatabase对象对于增,删,改有一个万能的execSQL()方法,也就是说增,删,改都可以用它

除此之外android还提供了非常方便的增删改查方法

查:

Cursor query(TABLE_NAME, null, null, null, null, null, null) ;

Cursor  rawQuery(sql, selectionArgs)

(有很多重载根据自己需求选择)

eg:

public List<TestTable> selectAll() {
  List<TestTable> list = null;
  String sqlStr = "select id,name,sex from tb_test";
  Cursor cursor = database.rawQuery(sqlStr, null);
  if (cursor.getCount() > 0) {
   list = new ArrayList<TestTable>();
   while (cursor.moveToNext()) {
    TestTable table = new TestTable();
    table.setId(cursor.getInt(cursor.getColumnIndex("id")));
    table.setName(cursor.getString(cursor.getColumnIndex("name")));
    table.setSex(cursor.getString(cursor.getColumnIndex("sex")));
    list.add(table);
   }
  }
  return list;
 }

增:

   long insert(tableName, nullColumnHack, values)

eg:

 public long insert(TestTable testTable) {
  ContentValues values = new ContentValues();
  values.put("name", testTable.getName());
  values.put("sex", testTable.getSex());
  return database.insert("tb_test", null, values);
 }

改:

long database.update(tableName, values, whereClause, whereArgs)

eg:

 public long update(TestTable testTable) {
  ContentValues values = new ContentValues();
  values.put("name", testTable.getName());
  values.put("sex", testTable.getSex());
  return database.update("tb_test", values, "id=?",
    new String[] { String.valueOf(testTable.getId()) });
  
 }
删:

long delete(tableName, whereClause, whereArgs)

eg:

 public long delete(int id) {
  return database.delete("tb_test", "id=?",
    new String[] { String.valueOf(id) });
  
 }