MainActivity如下:
[java]
package cc.testsqlcipher;
import net.sqlcipher.Cursor;
import net.sqlcipher.database.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.app.Activity;
/**
* Demo描述:
* 使用SQLCipher對SQLite數據庫進行加密
*
* 參考資料:
* 1 http://blog.csdn.net/guolin_blog/article/details/11952409
* 2 http://blog.csdn.net/zhuawami/article/details/9038003
* Thank you very much
*/
public class MainActivity extends Activity {
private Button mAddButton;
private Button mQueryButton;
private SQLiteDatabase mSqLiteDatabase;
private SQLCipherOpenHelper mSqlCipherOpenHelper;
private final String SECRET_KEY="95279527";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initView();
initDataBase();
}
private void initView(){
mAddButton=(Button) findViewById(R.id.addButton);
mAddButton.setOnClickListener(new ClickListenerImpl());
mQueryButton=(Button) findViewById(R.id.queryButton);
mQueryButton.setOnClickListener(new ClickListenerImpl());
}
private void initDataBase() {
//加載libs/armeabi中的so
SQLiteDatabase.loadLibs(this);
//獲取到SQLiteOpenHelper
mSqlCipherOpenHelper=new SQLCipherOpenHelper(this);
//設置打開數據庫的密碼SECRET_KEY
mSqLiteDatabase = mSqlCipherOpenHelper.getWritableDatabase(SECRET_KEY);
}
private class ClickListenerImpl implements OnClickListener {
private Person person;
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.addButton:
for (int i = 0; i < 15; i++) {
person = new Person("xiaoming" + i, "9527" + i);
addData(person);
}
break;
case R.id.queryButton:
person=queryData(8);
System.out.println(""+person.toString());
break;
default:
break;
}
}
}
public void addData(Person person) {
mSqLiteDatabase.execSQL("insert into person (name,phone) values(?,?)",
new Object[] {person.getName(), person.getPhone() });
}
public Person queryData(int id){
Cursor cursor=mSqLiteDatabase.rawQuery("select * from person where personid=?",
new String[]{String.valueOf(id)});
while(cursor.moveToFirst()){
int personid=cursor.getInt(cursor.getColumnIndex("personid"));
String name=cursor.getString(cursor.getColumnIndex("name"));
String phone=cursor.getString(cursor.getColumnIndex("phone"));
return new Person(personid, name, phone);
}
cursor.close();
return null;
}
}
SQLCipherOpenHelper如下:
[java]
package cc.testsqlcipher;
import android.content.Context;
import net.sqlcipher.database.SQLiteDatabase;
import net.sqlcipher.database.SQLiteOpenHelper;
/**
* 注意:
* 這裡包的引用,均是在:
* net.sqlcipher.database之下
*/
public class SQLCipherOpenHelper extends SQLiteOpenHelper {
private final static String DATABASE_NAME="test.db";
public SQLCipherOpenHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table person(personid integer primary key autoincrement,name varchar(20),phone VARCHAR(12))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
Person如下:
[java]
package cc.testsqlcipher;
public class Person {
private Integer id;
private String name;
private String phone;
public Person(String name, String phone) {
this.name = name;
this.phone = phone;
}
public Person(Integer id, String name, String phone) {
this.id = id;
this.name = name;
this.phone = phone;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", phone=" + phone + "]";
}
}
main.xml如下:
[html]
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="使用SQLCipher對數據庫進行加密"
android:layout_centerHorizontal="true"
/>
<Button
android:id="@+id/addButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="添加數據"
android:layout_marginTop="100dip"
/>
<Button
android:id="@+id/queryButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="查找數據"
android:layout_marginTop="200dip"
/>
</RelativeLayout>