好记性不如铅笔头

android, 编程

Android应用开发笔记:sqlite及其加密方法

在android/ios项目开发中,我们一般使用sqlite数据库来作为数据存储的介质。sqlite就不具体被忘了,这里重点备忘下sqlite的使用方式。

要存储的类型

class Person {
	public int age;
	public String name;
}

CONTENTS

1)在程序私有路径里访问数据库

//打开或创建test.db数据库  
SQLiteDatabase db = openOrCreateDatabase("test.db", Context.MODE_PRIVATE, null);  
db.execSQL("DROP TABLE IF EXISTS person");  
//创建person表  
db.execSQL("CREATE TABLE person (_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, age SMALLINT)");  
Person person = new Person();  
person.name = "john";  
person.age = 30;  
//插入数据  
db.execSQL("INSERT INTO person VALUES (NULL, ?, ?)", new Object[]{person.name, person.age});  
  
person.name = "david";  
person.age = 33;  
//ContentValues以键值对的形式存放数据  
ContentValues cv = new ContentValues();  
cv.put("name", person.name);  
cv.put("age", person.age);  
//插入ContentValues中的数据  
db.insert("person", null, cv);  
  
cv = new ContentValues();  
cv.put("age", 35);  
//更新数据  
db.update("person", cv, "name = ?", new String[]{"john"});  
  
Cursor c = db.rawQuery("SELECT * FROM person WHERE age >= ?", new String[]{"33"});  
while (c.moveToNext()) {  
    int _id = c.getInt(c.getColumnIndex("_id"));  
    String name = c.getString(c.getColumnIndex("name"));  
    int age = c.getInt(c.getColumnIndex("age"));  
    Log.i("db", "_id=>" + _id + ", name=>" + name + ", age=>" + age);  
}  
c.close();  
  
//删除数据  
db.delete("person", "age < ?", new String[]{"35"});  
  
//关闭当前数据库  
db.close();  
  
//删除test.db数据库  
deleteDatabase("test.db");  

 2)通过使用SQLiteOpenHelper来访问私有路径数据库

备注:

当前不备份了,后续补上。

参考

http://www.open-open.com/bbs/view/1321250996593 】【 http://blog.csdn.net/liuhe688/article/details/6715983 】

http://www.cnblogs.com/TerryBlog/archive/2010/06/12/1757166.html 】

3)访问sd卡下面的数据库

访问sd卡下面的数据库也是使用SQLiteDatabase来实现,和本地路径的区别如下:

1)增加权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

 2)修改获取db实例代码:

SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase("/mnt/sdcard/testsd.db", null);

 4)sqlite加密

如果我们要加密sqlite数据库,防止其他人访问,可以通过一个开源工程【 SQLCipher 】来实现。具体步骤备忘如下:

1)下载并放入工程中

SQLCipher有两个版本,商业版本和社区版本,我们使用社区版本。

访问下载地址【 http://sqlcipher.net/downloads/ 】,选择下载,如下图,注意下面的license。

2)解压缩后放入本地工程,如下图

3)替换相应的类

在java文件中引入头文件:

import net.sqlcipher.database.SQLiteDatabase;

 调用时要注意先loadlibs,然后在打开数据库时增加密码就可以了。

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       
        SQLiteDatabase.loadLibs(this); 
        SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase("/mnt/sdcard/testsd2.db", "key", null);
        }
}

备注:

参考链接
http://blog.csdn.net/guolin_blog/article/details/11952409 】【 http://blog.csdn.net/zhuawami/article/details/9038003
http://my.eoe.cn/37547/archive/3568.html 】【 http://www.cnblogs.com/huangsheng/p/3343933.html

 

发表评论

13 + 16 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据