android数据库操作的两种常见方式

第一,将放在资产目录的数据库复制到系统的目录中,在打开数据库进行操作:

1、建立一个工具类完成把文件拷贝到系统目录,本质就是写一个文件到其他文件对象中。

/**

 * 拷贝文件到系统的某个目录

 * 

 * @param is

 *            源文件的流

 * @param destPath

 *            目标路径

 * @return

 */

public static File copyFile(InputStream is, String destPath) {

try {

File file = new File(destPath);

FileOutputStream fos = new FileOutputStream(file);

byte[] buffer = new byte[1024];

int len = 0;

while ((len = is.read(buffer)) != -1) {

fos.write(buffer, 0, len);

}

fos.flush();

fos.close();

is.close();

return file;

catch (Exception e) {

e.printStackTrace();

return null;

}

 

}

 

1)获得系统文件目录:

final File file = new File(getFilesDir(), "commonnum.db");

2)获得位于资产目录的文件的输入流

InputStream is = getAssets().open("commonnum.db");

getResources()

*读取文件资源:1.读取res/raw下的文件资源,通过以下方式获取输入流来进行写操作
·        InputStream is =getResources().openRawResource(R.id.filename); 
2.读取assets下的文件资源,通过以下方式获取输入流来进行写操作
·        AssetManager am = null; 
·        am = getAssets(); 
·        InputStream is = am.open("filename"); 

 

 

2、读取拷贝到系统的数据库,并获得数据库引用。然后就可以操作数据库了。

SQLiteDatabase db = SQLiteDatabase.openDatabase(pathnull,

SQLiteDatabase.OPEN_READONLY);

 

注:拷贝到系统的数据库文件的路径为:public static final String path = "/data/data/应用包名/files/数据库文件";

自己建立的数据库是databases文件夹下。

 

 

第二自己建立数据库,并操作数据库

首先,继承SQLiteOpenHelper并建立数据库表结构。

其次建立dao类,完成数据库的增删该查。

 

数据库操作的常用语句:

 

create table blacknumber (_id integer primary key autoincrement,number varchar(20),mode varchar(2))

 

drop table leaveinfos 

 

 

select location from data2 where id=(select outkey from data1 where id=?

 

select number,mode from blacknumber order by _id desc

select number,mode from blacknumber order by _id desc limit ? offset  ?

/**

 * 分页查询数据

 * @param maxnumber 最多获取多少数据

 * @param offset 从第几条开始获取

 * @return

 */

public List<BlackNumberInfo> findByPage(int maxnumber , int offset){

//select * from blacknumber order by _id desc limit 5 offset  0

SQLiteDatabase db = helper.getReadableDatabase();

List<BlackNumberInfo> infos = new ArrayList<BlackNumberInfo>();

Cursor cursor = db.rawQuery("select number,mode from blacknumber order by _id desc limit ? offset  ?",

new String[]{maxnumber+"",offset+""});

while (cursor.moveToNext()) {

BlackNumberInfo info = new BlackNumberInfo();

info.setNumber(cursor.getString(0));

info.setMode(cursor.getString(1));

infos.add(info);

info = null;

}

cursor.close();

db.close();

return infos;

}

 

 

insert into blacknumber (number,mode) values (?,?)

update blacknumber set mode =? where number=?

 

delete from acceptleaveinfos where name=?

 

 

注意:数据库操作完毕要关闭数据库和游标结果集!!!对于需要经常查询的数据用集合缓存到内存中,提高效率。

 

3、在数据库里自定义uri消息邮箱地址

 

 

public class AppLockDao {

private AppLockDBOpenHelper helper;

private Context context;

public static  Uri uri = Uri.parse("content://cn.itheima.xxx");//自定义的消息邮箱的地址.

 

public AppLockDao(Context context) {

helper = new AppLockDBOpenHelper(context);

this.context = context;

}

 

/**

 * 查找 包名是否锁定

 * 

 * @param packname

 * @return

 */

public boolean find(String packname) {

boolean result = false;

SQLiteDatabase db = helper.getReadableDatabase();

Cursor cursor = db.rawQuery("select * from applock where packname=?",

new String[] { packname });

if (cursor.moveToNext()) {

result = true;

}

cursor.close();

db.close();

return result;

}

/**

 * 查询所有的锁定的包名信息.

 * @return

 */

public List<String> findAll(){

SQLiteDatabase db = helper.getReadableDatabase();

Cursor cursor = db.rawQuery("select packname from applock ",

null);

List<String> packnames = new ArrayList<String>();

while (cursor.moveToNext()) {

packnames.add(cursor.getString(0));

}

cursor.close();

db.close();

return packnames;

}

 

 

/**

 * 添加锁定包名

 * 

 * @param packname

 *            包名

 */

public void add(String packname) {

SQLiteDatabase db = helper.getWritableDatabase();

db.execSQL("insert into applock (packname) values (?)",

new Object[] { packname });

context.getContentResolver().notifyChange(urinull);

db.close();

}

 

 

/**

 * 删除锁定的包名

 * 

 * @param number

 */

public boolean delete(String packname) {

SQLiteDatabase db = helper.getWritableDatabase();

int result = db.delete("applock""packname=?",

new String[] { packname });

db.close();

if (result == 0) {

return false;

else {

context.getContentResolver().notifyChange(urinull);

return true;

}

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值