设为首页 收藏本站
查看: 1260|回复: 0

[经验分享] android SQLite数据库使用总结之(一)从加载本地数据库开始

[复制链接]

尚未签到

发表于 2016-12-1 10:58:47 | 显示全部楼层 |阅读模式
  好久以前就写了,但是一直拖拖拉拉的,在草稿箱里放了两个星期还没写完,想想这样托下去又要废掉了,还是分开来吧,写多少是多少。
  

  android的SQLite数据库简单使用一段时间了,现在想抽些时间总结下,不然总感觉很乱
  


1、先说一个工具:SQLiteExpert
  

  SQLite Expert,一款SQLite数据库操作工具,下载地址:http://www.sqliteexpert.com/ ,Personal Edition是免费的,日常使用基本足够,需要专业版的可以自行网上寻找。当然,其他免费的工具还有很多,如:SQLite
Database Browser,SQLiteManager等。

   DSC0000.jpg

  


2、从加载一个本地数据库开始

假设我们的SDCard的根目录上已经存在一个数据库,名称为:ChinaCity.db。这时候我们可以这样操作:




public void readDataBaseFromSDCard() {
String dbPath = Environment.getExternalStorageDirectory() + "/ChinaCity.db";
File dbFile = new File(dbPath);
if (!dbFile.exists()) {
Toast.makeText(getApplicationContext(), "请先点击拷贝到SDCard", Toast.LENGTH_LONG).show();
return;
}
openOrCreateDatabase(dbPath, SQLiteDatabase.CREATE_IF_NECESSARY, null);
SQLiteDatabase db = SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.OPEN_READWRITE);
// db = openOrCreateDatabase(dbPath, SQLiteDatabase.OPEN_READWRITE, null);
StringBuffer sb = new StringBuffer();
Cursor cursor = db.rawQuery("select * from china_provinces_code", null);
while (cursor.moveToNext()) {
int id = cursor.getInt(cursor.getColumnIndex("_id"));  
String name = cursor.getString(cursor.getColumnIndex("name"));  
sb.append(id + ":" + name + " \n");
}
System.out.println(sb.toString());
}








先用SQLiteDatabase的一个静态方法openDatabase一个数据库,第一个参数为数据库文件路径,第二个参数一般为null,第三个参数为打开数据库的方式,由于只需要读取数据,所以我们选择SQLiteDatabase.OPEN_READONLY,此种方式的好处是数据库存在的话就不会出错;另外一种为SQLiteDatabase.OPEN_READWRITE,以读写的方式打开。执行上面代码,我们会看与上图信息相同的:

DSC0001.jpg



  开发的时候,我们可能会需要一些初始化数据,比如城市信息,这样我们就可以事先创建好一个数据库,写入初始数据,将其放入自己的apk中一起分发。这个时候我们就可以直接从资源文件中读取这个数据库文件写入到应用的数据库目录或者SDCard中,然后就可以对其操作,拷贝代码如下:

/**
* 拷贝资源中数据库
* @param where 1SDCARD,2LOCAL
*/
public void copyDataBase(int where) {
// 每个应用都有一个数据库目录,他位于 /data/data/packagename/databases/目录下
String packageName = "com.ttdevs.citydata"; // xml中配置的
String dbName = "ChinaCity.db";
String dbPath = null;
if(where == 1){ // sdcard
dbPath = Environment.getExternalStorageDirectory() + File.separator + dbName;
} else { // local
dbPath = "/data/data/" + packageName + "/databases/" + dbName;
}
if(where == 2){
new File("/data/data/" + packageName + "/databases/").mkdirs();
}
if ( where == 1 && !Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
return ; // 未挂载外部存储,拷贝到内部不用判断
}
File dbFile =new File(dbPath);
if(dbFile.exists()){
dbFile.delete();
}
try {
dbFile.createNewFile();
} catch (IOException e1) {
e1.printStackTrace();
return ;
}
try {
InputStream is = getResources().getAssets().open(dbName);
OutputStream os = new FileOutputStream(dbPath);
byte[] buffer = new byte[1024];
int length = 0;
while ((length = is.read(buffer)) > 0) {
os.write(buffer, 0, length);
}
os.flush();
os.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
Toast.makeText(getApplicationContext(), "拷贝成功", Toast.LENGTH_LONG).show();
}
  代码不是很严谨,凑活着看哈。经过以上步骤,我们就可以开始使用数据库,数据库的常用操作,在以后的博客中继续。
  

  ChinaCity.db数据库:下载

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-308149-1-1.html 上篇帖子: android数据库操作出现的 android.database.sqlite.SQLiteConstraintException: error code 19 下篇帖子: action的使用之封装AIR对本地数据库sqlite的操作
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表