开发者社区> 小弟的谷哥> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Android使用SQLCipher对SQLite数据库进行加密

简介: MainActivity如下: package cc.testsqlcipher; import net.sqlcipher.Cursor; import net.
+关注继续查看

MainActivity如下:

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如下:

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如下:

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如下:

<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>


 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Android真机没有sqlite3数据库的解决办法
Android真机没有sqlite3数据库的解决办法
0 0
Android 音乐APP(四)显示专辑图片、本地数据库、自定义通知栏样式、通知栏显示
Android 音乐APP(四)显示专辑图片、本地数据库、自定义通知栏样式、通知栏显示
0 0
【Android】7.0复杂数据的存储SQLite(内置数据库)Room框架
常用的数据库 sqlserver oracle mysql Android嵌入式数据库SQLite SQLite数据库支持SQL语法和ACID事务,适用于存储大量的关系型数据 eg:qq的聊天列表 学习强国的新闻
0 0
android 数据库简单理解使用
android 数据库简单理解使用
0 0
【Android Jetpack】Room数据库的使用及原理详解
Android Jetpack的出现统一了Android开发生态,各种三方库逐渐被官方组件所取代。Room也同样如此,逐渐取代竞品成为最主流的数据库ORM框架。这当然不仅仅因为其官方身份,更是因为其良
0 0
Android数据库开发基础入门【附完整案例】
Android数据库开发基础入门【附完整案例】
0 0
数据库还可以这么看?(Android Studio 4.1 新特性)
数据库还可以这么看?(Android Studio 4.1 新特性)
0 0
【Android 逆向】使用 DB Browser 查看并修改 SQLite 数据库 ( 从 Android 应用数据目录中拷贝数据库文件 | 使用 DB Browser 工具查看数据块文件 )
【Android 逆向】使用 DB Browser 查看并修改 SQLite 数据库 ( 从 Android 应用数据目录中拷贝数据库文件 | 使用 DB Browser 工具查看数据块文件 )
0 0
【Android 逆向】使用 DB Browser 查看并修改 SQLite 数据库 ( 下载 DB Browser 安装包 | 安装 DB Browser 工具 )
【Android 逆向】使用 DB Browser 查看并修改 SQLite 数据库 ( 下载 DB Browser 安装包 | 安装 DB Browser 工具 )
0 0
【Android 逆向】应用数据目录 ( files 数据目录 | lib 应用自带 so 动态库目录 | databases sqlite3 数据库目录 | cache 缓存目录 )
【Android 逆向】应用数据目录 ( files 数据目录 | lib 应用自带 so 动态库目录 | databases sqlite3 数据库目录 | cache 缓存目录 )
0 0
+关注
小弟的谷哥
welcome
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Android组件化实现
立即下载
蚂蚁聚宝Android秒级编译—— Freeline
立即下载
Android插件化:从入门到放弃
立即下载