- 浏览: 395907 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (285)
- test (0)
- 分类 (1)
- java (281)
- tttttttttttt (1)
- android程序复制数据库 (1)
- Hibernate 动态 HQL (1)
- java编写扑克的洗牌程序 (1)
- NIO 之 选择就绪模式 (1)
- wpo另类问题:不可轻视的蜘蛛爬行对服务器造成的负担 (1)
- haml (1)
- cvcvcvc (1)
- 开源史上最成功的8个开源产品 (1)
- XML文件转换成Word文件或者Excel文件 (1)
- 一些利用开源浏览器核心开发专用浏览器的连接 (1)
- 毛笔效果简单思路 (1)
- 年终考评以后 (1)
- RFC821 简单邮件传输协议(SMTP)中文定义文档 (1)
- JNI中jstring类型与c语言中的字符串的转换 (1)
- 极限编程(XP)的重构与设计模式 (1)
- MapInfo2005年第三期电子新闻 (1)
- 想到目前各BLOG站点和搜索引擎的一点点缺陷 (1)
- 成功通过DB2的700和701考试 (1)
- 基于记录登陆信息的防止网页暴力破解方法 (1)
- Router路由 (1)
- 终于稍微完整的学习了一下Linux (1)
- android手机通讯录备份还原代码 (1)
- Qt之美(一):d指针/p指针详解 (1)
- DB2 静默安装 (1)
- linux开机启动脚本的顺序 (1)
- Hibernate实体对象的三种状态 (1)
- Hibernate面向对象的hql语句 (1)
- ibatIS调用存储过程 (1)
- Linux启动过程(详细说明) (1)
- C3P0配置 (1)
- memcache安装 (1)
- js event.keyCode (1)
- java获取汉子首字母 (1)
- Eclipse GC log (1)
- java轻量级httpserver (1)
最新评论
-
smilea001:
我知道了,作者采用的是gbk编码,我采用的是utf-8编码,
java获取汉子首字母 -
smilea001:
我输入的也是--
java获取汉子首字母 -
di1984HIT:
写的不错啊。
Router路由 -
kaixinyou:
...
2011.07.20——— android 获得当前view在屏幕的坐标 -
zhengjianbo:
你好,可以将你的实现代码公布下吗!万分感谢!
毛笔效果简单思路
一般项目中我们把db文件放到assert或者raw目录下面,在程序第一次启动的时候复制到私有目录下面
?
在使用过程中,老是发现复制不成功,私有目录下的db文件总是3072
?
<span style="color: #ff0000;">后来发现应该是使用ContentProvider的原因,它会先创建一个空的db。
</span>
<br><img src="http://dl.iteye.com/upload/attachment/598512/8863f1d9-f38b-33f4-8262-dd5692375d79.jpg" alt="">
而我的程序在复制数据库的时候会判断私有目录下是否有数据库文件,如果有则不复制。
?
现在改为用SharedPreferences一个字段判断是否第一次复制。
<span style="color: #ff0000;">第一次复制数据库的时候就算私有目录下有db文件,也删除。</span>
这样就ok了
?
代码如下:
public class CopyDataActivity extends Activity{ boolean needCopy = false; SharedPreferences mSP = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.copy_data); mSP = getSharedPreferences(Constants.PREFERENCES_NAME, MODE_PRIVATE); needCopy = mSP.getBoolean("need_copy_data", true); if(needCopy){ handler.post(copyPlanThread); }else{ goToMain(); } } private void goToMain(){ mSP.edit().putBoolean("need_copy_data", false).commit(); startActivity(new Intent(CopyDataActivity.this,LoginActivity.class)); this.finish(); } private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); int what = msg.what; int arg1 = msg.arg1; if(what==1){ //这里可以在页面显示复制进度什么的 Log.e("Copy","复制大小:"+arg1); }else{ goToMain(); mSP.edit().putBoolean("need_copy_data", false).commit(); } } }; Runnable copyPlanThread = new Runnable() { @Override public void run() { try{ copyDatabase(); }catch(Exception e){ e.printStackTrace(); } } }; private void copyDatabase() throws Exception{ Log.e("Copy","copy start"); File dbfile = new File(getFilesDir().getAbsolutePath() +File.separator+ "mydb.db"; File dir = dbfile.getParentFile(); if(dir.exists() == false){ dir.mkdirs(); } //把contentprovider生成的db删除 if(dbfile.exists()){ dbfile.delete(); } InputStream is = this.getResources().openRawResource(R.raw.library); FileOutputStream fos = new FileOutputStream( dbfile); byte[] buffer =new byte[1024]; int size = 0; int length = 0; //字节 while( (length= is.read(buffer)) > 0){ fos.write(buffer,0,length); size += length; Message msg = new Message(); msg.what = 1; msg.arg1 = size; handler.sendMessage(msg); } fos.flush(); fos.close(); is.close(); Log.e("Copy","copy end"); Message msg = new Message(); msg.what = 0; msg.arg1 = 0; handler.sendMessage(msg); } }
?
?
?
<ul style="display:none;">
</ul>
发表评论
-
java轻量级httpserver
2012-02-08 11:48 1616httpclient+httpserver demo ... -
Eclipse GC log
2012-02-04 16:59 1458为了查看Eclipse GC log,需要在eclip ... -
java获取汉子首字母
2012-02-03 09:14 1551public class StringUtil { ... -
js event.keyCode
2012-02-03 09:09 1240<span style="" ... -
memcache安装
2012-02-02 12:04 1193? <blockquote> 1. ... -
C3P0配置
2012-02-02 11:34 1017cquireIncrement[3] ... -
Linux启动过程(详细说明)
2012-02-01 09:09 1611<div class="post ... -
ibatIS调用存储过程
2012-01-31 15:38 1636<p>一、ibatIS调用存储过程(调用存 ... -
Hibernate面向对象的hql语句
2012-01-11 13:14 1027Hibernate中hql条件语句的书写方式有: ? ... -
Hibernate实体对象的三种状态
2012-01-11 12:59 1304<p style="text- ... -
linux开机启动脚本的顺序
2011-12-21 15:14 1153下开机自动启动脚本所涉及的知识和方法、如下: ... -
DB2 静默安装
2011-12-21 11:59 1089<span style="color: ... -
Qt之美(一):d指针/p指针详解
2011-12-20 15:14 2028[/b]2011.11.16 [size=18px;] ... -
android手机通讯录备份还原代码
2011-12-20 11:54 2975<span style="font-f ... -
终于稍微完整的学习了一下Linux
2011-12-19 12:14 1200Linux以前也装过两次,不过几乎没去用。头几天看一些 ... -
Router路由
2011-12-19 10:54 1210Router路由:设定线的轨迹,在Connection ... -
基于记录登陆信息的防止网页暴力破解方法
2011-12-17 10:49 1458对黑客方面比较感兴趣的或者是比较熟悉的,应该知道溯雪这 ... -
成功通过DB2的700和701考试
2011-12-16 17:27 892嘿嘿,原以为比较没有信心的701考试也被俺成功的攻克了 ... -
想到目前各BLOG站点和搜索引擎的一点点缺陷
2011-12-15 15:54 903感觉无聊,就到中国博客网的首页逛了逛,想看看有没有什么 ... -
MapInfo2005年第三期电子新闻
2011-12-15 10:49 937<span lang="EN-US&q ...
相关推荐
3. **复制数据库到应用数据库目录** 因为`assets`目录下的文件无法直接由SQLite数据库API访问,我们需要在应用首次运行时将数据库文件复制到上述的数据库路径。这通常在`SQLiteOpenHelper`的`onCreate()`或`...
在Android平台上,数据库是应用程序存储结构化数据的重要方式。SQLite是一种轻量级的、嵌入式的、关系型数据库,它是Android系统默认支持的数据库系统。本文将深入探讨如何在Android设备上查看和导出SQLite数据库...
在Android开发中,有时我们需要将预置的数据库文件与应用一起发布,并在应用程序首次启动时将其复制到外部存储(如SD卡)或内部存储(内存)中,以便于后续的操作和使用。这样的需求通常出现在那些需要提供初始数据...
在Android应用开发中,数据库是存储和管理应用程序数据的关键组件。`SQLite Asset Helper`是一个流行的开源库,由Jake Wharton创建,它简化了在Android应用中处理SQLite数据库的工作流程,特别是涉及数据库初始化和...
在Android开发中,数据安全是至关重要的,尤其是当应用程序存储敏感用户信息时。"android 加密已创建的数据库"这个话题涉及到如何使用第三方库SQLCipher对已经存在的SQLite数据库进行加密,以增强数据的安全性。...
总之,在Android中从`assets`目录读取数据库涉及复制数据库文件、创建数据库帮助器、打开数据库并进行操作等步骤。通过这种方式,我们可以预先加载数据库,提供快速启动体验,或者在不联网的情况下使用预设的数据。...
- 调用`copyDatabase()`方法在应用启动时复制数据库,然后通过`getWritableDatabase()`或`getReadableDatabase()`打开数据库进行读写操作。 3. **使用SQLiteOpenHelper的实例进行数据操作**: - 在你的应用中,你...
在Android系统中,数据库是用于存储应用程序数据的重要组成部分。它通常使用SQLite,一个轻量级、关系型数据库管理系统,能够高效地处理大量的数据。本文将深入探讨如何通过命令行方式来访问Android设备上的数据库,...
2. **复制数据库文件**:在应用启动时或需要加载数据库时,我们需要将assets目录下的.db文件复制到Android的默认数据库路径(通常是/data/data/your_package_name/databases/)。可以使用InputStream和OutputStream...
2. **复制数据库文件**:在`SQLiteOpenHelper`的子类中,创建一个方法用于从`assets`目录复制数据库文件到`databases`目录。这里需要用到`Context`对象,可以通过`getApplication()`或者`getApplicationContext()`...
对于调试目的,可以使用adb(Android Debug Bridge)将数据库文件复制到本地。文件通常位于`/data/data/your.package.name/databases/your_database.db`路径下。 一旦你有了.db文件,可以在计算机上使用SQLite...
Fragment是Android应用程序的一个模块化组件,它可以独立于Activity存在,并可以在多个Activity之间复用。在这个Demo中,每个号码归属地查询的结果都由一个Fragment来表示,ViewPager将这些Fragment进行组合和管理...
首先,让我们详细讨论如何在Android中复制数据库到SD卡。在Android 6.0(API级别23)之前,应用程序可以直接写入SD卡,但从那时起,为了增强用户数据安全,Google引入了运行时权限管理系统。因此,现在你需要请求`...
在Android应用开发中,数据库是存储用户数据和应用程序信息的重要工具。SQLite是一个轻量级的、关系型的数据库,它是Android系统内置的数据库系统,适用于本地数据存储。本篇文章将详细探讨如何在Android应用中实现...
在这种情况下,可以使用`Context`的`openFileInput()`和`openFileOutput()`方法打开数据库文件,或者使用`AssetManager`从应用资源中复制数据库文件。 例如,当从应用的assets目录加载数据库时,可以这样操作: ``...
由于这个目录是受保护的,你需要通过ADB(Android Debug Bridge)连接到设备,并使用`adb pull`命令将数据库文件复制到电脑上。例如: ``` adb pull /data/data/your_package_name/databases/your_database.db /...
在Android开发中,SQLite是一个重要的组成部分,它是轻量级的关系型数据库,被广泛用于存储应用程序中的数据。SQLite3是SQLite的第三个主要版本,它提供了高效、可靠的数据库操作能力。在这个"Android 数据库操作...
SQLite是一个轻量级的数据库系统,它是Android内置的数据库,用于应用程序存储结构化数据。本文将深入探讨如何在Android中进行数据库的导入与导出,以及如何利用工具SQLiteSpy对SQLite数据库进行操作。 首先,我们...
在Android应用开发中,数据库是存储和管理应用程序数据的关键组件。当应用的数据库需要更新以适应新功能或改进的数据结构时,如何优雅地进行数据库升级并同时保留原有的用户数据成为一个重要的问题。本篇文章将深入...
在Android平台上,开发人员经常需要处理数据存储,包括将数据库文件移动到外部存储(如SD卡)以及在界面上展示应用程序图标的小红点等角标信息。这份源码示例涵盖了这两个主题,提供了关于Android高级应用开发的知识...