对于移动客户端来说,数据库肯定都是轻量级的,像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) ;

CursorrawQuery(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) });

}

更多相关文章

  1. Android(安卓)怎样通过蓝牙传输文件
  2. 创建一个QT for Android的传感器应用应用程序(摘自笔者2015年将出
  3. Android框架浅析
  4. Android调用系统安装程序打开本地文件(包括 Android7.0以上)
  5. Android应用程序私有目录下文件操作总结
  6. Android反编译和二次打包实战
  7. Android(安卓)插件化
  8. 应用程序如何获取系统权限
  9. Android(安卓)断点续传,手写多线程下载文件、数据库存储进度

随机推荐

  1. 【原创】如何在Android中为TextView动态
  2. Android万能适配器Adapter
  3. android 普通对话框
  4. Android(安卓)-- 获取汉字的首字母
  5. android中调用.net web service
  6. create new Android(安卓)Virtual Device
  7. 在线安装ADT总是出现以下错误
  8. android如何编差分包升级
  9. Android实现邮箱验证功能
  10. 为android应用程序添加桌面快捷方式