关于安卓在共有目录保存数据库并加密
来源:互联网 发布:可可验证源码 编辑:程序博客网 时间:2024/05/17 08:34
注:安卓数据库的创建 data/data私有的目录是我们现阶段支持的 其余的路径虽然在安卓可以创建 但是这并不是值得推广的 因为出在数据泄露和.... 你懂得
SQLCipher + ...... 3.1.0.zip 这个版本 自行去网上下载 使用2.2.2的版本 一直有一个异常 更换这个版本就可以使用了 有兴趣的可以试一试
需要 ad x86 v7a 三个 并且包括三个jar 一个asset文件 SQLiteDatabase.login(this);
将所有DataBase的包名更改成 net.datebase
清单文件中添加
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
使用时的程序 activity中
SQLiteDatabase.loadLibs(context);
DatabaseContext content = new DatabaseContext(context);
helper = new MyDatabase(content);
db = helper.getReadableDatabase("999"); //读取时的权限
db = helper.getWritableDatabase("999"); //写时的权限
dao = new ScoreDao(context);
scoreBean = dao.selectScores();
写一个类 继承SQLiteOpenHelper
public class MyDatabase extends SQLiteOpenHelper {
private final String Table_Name = "Test";
public MyDatabase(DatabaseContext context) {
super(context, "gogogo.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
String sql = " create table if not exists " + Table_Name
+ "(id integer primary key autoincrement,name varchar(30),age varchar(30))";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
ScoreDao类 进行数据库的操作
public class ScoreDao {
private static final String TAG = "ScoreDao";
private final String Table_Name = "Test";
private MyDatabase myDatabase;
public ScoreDao(Context context) {
DatabaseContext dbContext = new DatabaseContext(context);
myDatabase = new MyDatabase(dbContext);
}
public void add(String name,String age){
SQLiteDatabase db = myDatabase.getWritableDatabase("999");
db.execSQL("insert into Test values(null,?,?)", new Object[]{name,age});
Log.d(TAG,"添加成功");
db.close();
}
public void delete(String phonesn){
SQLiteDatabase db = myDatabase.getWritableDatabase("999");
db.execSQL("delete from Test where name = ?",new Object[]{name});
db.close();
}
public void update(String name,String age){
SQLiteDatabase db = myDatabase.getWritableDatabase("999");
db.execSQL("update Test set age = ? where name = ?", new Object[]{name,age});
Log.d(TAG,"添加成功");
db.close();
}
public String find(String islogin){
String phonesn = null;
SQLiteDatabase db = myDatabase.getReadableDatabase("999");
//cursor是一个结果集
Cursor cursor = db.rawQuery("select phonesn from Test where name = ?", new String[]{name});
boolean result = cursor.moveToNext();//判断是够有符合条件的元素
if (result) {
phonesn = cursor.getString(0);//获取第一列元素
}
cursor.close();
db.close();
return age;
}
public List<ScoreBean> selectScores(){
//创建集合
List<ScoreBean> scores=new ArrayList<ScoreBean>();
//获取数据库操作实例
SQLiteDatabase db=myDatabase.getReadableDatabase("999");
//创建Cursor对象
Cursor cursor=null;
try {
cursor = db.rawQuery("select * from Test",null);
while(cursor.moveToNext()){
String name=cursor.getString(cursor.getColumnIndex("name"));
String age=cursor.getString(cursor.getColumnIndex("age"));
//创建Person对象
ScoreBean p = new ScoreBean(name,age);
//将创建出来的ScoreBean对象添加到集合中去
scores.add(p);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
//关闭相应的资源
if(cursor!=null){
cursor.close();
}
if(db!=null){
db.close();
}
}
return scores;
}
}
自己的上下文 可以将data/data目录下的数据库进行修改
public class DatabaseContext extends ContextWrapper {
public DatabaseContext(Context context){
super( context );
}
/**
* 获得数据库路径,如果不存在,则创建对象对象
* @param name
*/
@Override
public File getDatabasePath(String name) {
//判断是否存在sd卡
boolean sdExist = Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());
if(!sdExist){//如果不存在,
return null;
}else{//如果存在
//获取sd卡路径
String dbDir = Environment.getExternalStorageDirectory().getAbsolutePath() + "/";
dbDir += "DB";//数据库所在目录
String dbPath = dbDir+"/"+name;//数据库路径
//判断目录是否存在,不存在则创建该目录
File dirFile = new File(dbDir);
if(!dirFile.exists()){
dirFile.mkdirs();
}
//数据库文件是否创建成功
boolean isFileCreateSuccess = false;
//判断文件是否存在,不存在则创建该文件
File dbFile = new File(dbPath);
if(!dbFile.exists()){
try {
isFileCreateSuccess = dbFile.createNewFile();//创建文件
} catch (IOException e) {
e.printStackTrace();
}
}else{
isFileCreateSuccess = true;
}
//返回数据库文件对象
if(isFileCreateSuccess){
return dbFile;
}else{
return null;
}
}
}
/**
* 重载这个方法,是用来打开SD卡上的数据库的,android 2.3及以下会调用这个方法。
*
* @param name
* @param mode
* @param factory
*/
// @Override
public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory) {
SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name),"999",null);
return result;
}
/**
* Android 4.0会调用此方法获取数据库。
*
* @see ContextWrapper#openOrCreateDatabase(String, int,
* SQLiteDatabase.CursorFactory,
* DatabaseErrorHandler)
* @param name
* @param mode
* @param factory
* @param errorHandler
*/
// @Override
public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory, DatabaseErrorHandler errorHandler) {
SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name),"999", null);
return result;
}
}
0 0
- 关于安卓在共有目录保存数据库并加密
- 安卓保存照片到手机数据库并在相册显示
- 关于安卓保存网络图片并更新图库
- 安卓实现从互联网上获取图片并保存到本地目录中
- 安卓启动拍照并保存照片
- 上传照片并保存在数据库中
- 安卓开发关于图片保存到本地相册并显示功能
- Unity安卓Android与iOS保存图片并显示在相册
- 安卓实现调用系统图库与相机设置头像并保存在本地及服务器
- Flex Mobile拍照并保存在自定义目录
- iOS 实现录音并保存在指定文件目录下面
- 安卓Shareprefrence实现记住密码自动登录以及保存在shareprefrence里面数据如何加密解密
- 安卓移动文件(图片)到指定目录,并在相册中显示
- java 加密字节数组在数据库中的保存
- 安卓数据保存——保存至SQL数据库
- 安卓训练-开始-保存数据-保存数据到数据库
- 关于安卓数据库操作
- 安卓系统适合保存数据的目录
- 如何合理地估算线程池大小?
- java语法,是理解、分析和解决任何java程序、框架、工程的万能切入点
- scrollView frame改变时contentOffset会被重置或改变
- LPTHW L16 NOTE
- Android中定时执行任务的3种实现方法
- 关于安卓在共有目录保存数据库并加密
- 深入学习百度地图Android SDK v4.0.0【第七关】周边雷达
- 在MAC上搭载cocos2d-x环境,创建HelloWorld工程
- 循环语句中的break和continue
- 【前端构建】WebPack实例与前端性能优化
- 堆和栈的区别(转过无数次的文章)
- 解决“LNK1123: 转换到 COFF 期间失败: 文件无效或损坏”
- javaScript array(数组)使用字符串作为数组下标的方法
- Maven3路程(一)环境搭建