- 浏览: 161561 次
- 性别:
- 来自: 大连
最新评论
-
撒旦的堕落:
引用引用引用引用引用引用引用引用引用引用引用引用引用引用引用引 ...
★Struts2中的Ajax实现 <s:a> Ⅱ -
撒旦的堕落:
引用引用引用引用引用引用引用引用引用引用引用引用引用引用引用引 ...
★Struts2中的Ajax实现 <s:a> Ⅱ -
crazyj2ee:
[img][/img]
flex 3 从页面url中取参数取值的完美解决方案 -
suixinsuoyu12519:
你好,请问 “Update的系统内部执行情况可以参照附文:对u ...
Update优化小结 -
04023129:
试下 把wc.preSharedKey = "pa ...
设置 Android wifi连接 samples【转】
Most all of the Android examples and tutorials out there assume you want to create and populate your database at runtime and not to use and access an independent, preloaded database with your Android application.
The method I'm going to show you takes your own SQLite database file from the "assets" folder and copies into the system database path of your application so the SQLiteDatabase API can open and access it normally.
1. Preparing the SQLite database file.
Assuming you already have your sqlite database created, we need to do some modifications to it.
If you don't have a sqlite manager I recommend you to download the opensource SQLite Database Browser available for Win/Linux/Mac.
Open your database and add a new table called "android_metadata", you can execute the following SQL statement to do it:
CREATE TABLE "android_metadata" ("locale" TEXT DEFAULT 'en_US')
Now insert a single row with the text 'en_US' in the "android_metadata" table:
INSERT INTO "android_metadata" VALUES ('en_US')
Then, it is necessary to rename the primary id field of your tables to "_id" so Android will know where to bind the id field of your tables.
You can easily do this with SQLite Database Browser by pressing the edit table button , then selecting the table you want to edit and finally selecting the field you want to rename.
After renaming the id field of all your data tables to "_id" and adding the "android_metadata" table, your database it's ready to be used in your Android application.
Note: in this image we see the tables "Categories" and "Content" with the id field renamed to "_id" and the just added table "android_metadata".
2. Copying, opening and accessing your database in your Android application.
Now just put your database file in the "assets" folder of your project and create a Database Helper class by extending the SQLiteOpenHelper class from the "android.database.sqlite" package.
Make your DataBaseHelper class look like this:
public class DataBaseHelper extends SQLiteOpenHelper{ //The Android's default system path of your application database. private static String DB_PATH = "/data/data/YOUR_PACKAGE/databases/"; private static String DB_NAME = "myDBName"; private SQLiteDatabase myDataBase; private final Context myContext; /** * Constructor * Takes and keeps a reference of the passed context in order to access to the application assets and resources. * @param context */ public DataBaseHelper(Context context) { super(context, DB_NAME, null, 1); this.myContext = context; } /** * Creates a empty database on the system and rewrites it with your own database. * */ public void createDataBase() throws IOException{ boolean dbExist = checkDataBase(); if(dbExist){ //do nothing - database already exist }else{ //By calling this method and empty database will be created into the default system path //of your application so we are gonna be able to overwrite that database with our database. this.getReadableDatabase(); try { copyDataBase(); } catch (IOException e) { throw new Error("Error copying database"); } } } /** * Check if the database already exist to avoid re-copying the file each time you open the application. * @return true if it exists, false if it doesn't */ private boolean checkDataBase(){ SQLiteDatabase checkDB = null; try{ String myPath = DB_PATH + DB_NAME; checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); }catch(SQLiteException e){ //database does't exist yet. } if(checkDB != null){ checkDB.close(); } return checkDB != null ? true : false; } /** * Copies your database from your local assets-folder to the just created empty database in the * system folder, from where it can be accessed and handled. * This is done by transfering bytestream. * */ private void copyDataBase() throws IOException{ //Open your local db as the input stream InputStream myInput = myContext.getAssets().open(DB_NAME); // Path to the just created empty db String outFileName = DB_PATH + DB_NAME; //Open the empty db as the output stream OutputStream myOutput = new FileOutputStream(outFileName); //transfer bytes from the inputfile to the outputfile byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer))>0){ myOutput.write(buffer, 0, length); } //Close the streams myOutput.flush(); myOutput.close(); myInput.close(); } public void openDataBase() throws SQLException{ //Open the database String myPath = DB_PATH + DB_NAME; myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); } @Override public synchronized void close() { if(myDataBase != null) myDataBase.close(); super.close(); } @Override public void onCreate(SQLiteDatabase db) { } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } // Add your public helper methods to access and get content from the database. // You could return cursors by doing "return myDataBase.query(....)" so it'd be easy // to you to create adapters for your views. }
That's it.
Now you can create a new instance of this DataBaseHelper class and call the createDataBase() and openDataBase() methods. Remember to change the "YOUR_PACKAGE" to your application package namespace (i.e: com.examplename.myapp) in the DB_PATH string.
... DataBaseHelper myDbHelper = new DataBaseHelper(); myDbHelper = new DataBaseHelper(this); try { myDbHelper.createDataBase(); } catch (IOException ioe) { throw new Error("Unable to create database"); } try { myDbHelper.openDataBase(); }catch(SQLException sqle){ throw sqle; } ...
Enjoyed this post? ReignDesign is a great team of tech-savvy developers providing RIA and mobile services. For more articles like this, subscribe to our blog feed.
Tags: Android, Databases, howto, Java, SQLite
This entry was posted on Tuesday, March 3rd, 2009 at 2:22 pm and is filed under Technology. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
发表评论
-
如何在Mac OS中安装 wget
2012-07-09 22:50 28557刚入手Macbook pro。说实话日本的比国内的真的便宜好的 ... -
Android开发片段 WebView
2012-02-06 14:55 1187/** Called when the activity i ... -
Office文档在线查看解决方案
2012-02-03 12:57 4705本文使用的是office软件自带的Save as 功能 自动存 ... -
事务添加的位置问题 工作总结
2010-07-13 10:44 888今天在公司的开发的框架上做了一个应用,才意识到一个问题,原来这 ... -
一个简单的JavaScript 框架
2009-08-25 15:38 1045这几天做新项目,做了一个简单的JS验证框架,分享一下,欢迎大家 ... -
解决EXT 与prototype 框架冲突问题
2009-08-10 11:59 1342很简单,只需要将prototype框架放在最前面就可以了 -
POI设置rightHead的Page和Date的fangfa
2009-05-19 14:36 1022&6Page:&P Date:&D -
Oracle表段中的高水位线HWM
2009-05-03 09:53 1428在Oracle数据的存储中,可以把存储空间想象为一个水库, ... -
Django 小例子
2009-04-18 21:35 2285最近想学习python,尤其是Django,本来照着Step ... -
ORACLE 表和数据完全COPY
2009-04-17 15:52 996create table new_tab as ... -
Oracle pl/sql 中实现 continue
2009-02-01 16:30 3532CREATE TABLE AREAS ( RADIUS ... -
flex 3 从页面url中取参数取值的完美解决方案
2008-12-31 22:14 2304flex 3 从页面url中取参数取值的完美解决方案 1:当 ... -
ORACLE 游标的4种应用方法
2008-12-29 17:51 1231--1.普通cursor set serveroutput o ... -
oracle-merge用法详解
2008-12-11 09:04 3160Oracle9i引入了MERGE命令,你能够在一个SQL语句中 ... -
分组取最大
2008-12-10 17:09 1833--按某一字段分组取最大(小)值所在行的数据(2007-10- ... -
SQL语句学习 CASE WHEN THEN ELSE END
2008-12-10 17:06 1951比较2列的值选择最大的一列输出: table a ( ... -
★SqlServer 中 link serve的使用
2008-11-26 09:19 3588问题描述: 日 ... -
★Struts2中的Ajax实现 <s:a> Ⅱ
2008-11-19 10:05 3281实用JSON在Struts2中实现AJax这篇文章是抄袭Max ... -
★Struts2中的Ajax实现 <s:a>
2008-11-19 09:25 2967项目作完了,现在没什么事情做,继续研究一下Struts2框架. ... -
★给和我一样的新手推荐一个Struts2学习的网站
2008-11-19 09:19 1134给和我一样的新手推荐一个Struts2学习的网站ht ...
相关推荐
本教程将指导你如何将Excel数据导入到Android应用的SQLite数据库.db文件中,以便在应用运行时能够访问和操作这些数据。我们将使用SQLite Expert Professional这款强大的SQLite数据库管理工具,该工具在提供的压缩包...
在build.gradle文件中添加依赖: ```groovy dependencies { implementation 'com.github.nkzawa:android-excel:0.1.3' // 或其他版本 } ``` 2. **创建Excel文件**:在Android中,我们通常会在外部存储(SD卡)上...
"Android存储字符串数据到...使用FileUtils工具类可以非常方便地将字符串数据存储到txt文件中,从而满足我们的需求。但是,需要注意的是,在使用FileUtils工具类时,需要确保文件路径和文件名的正确性,以免出现错误。
3. **文件读取与分块**:在Android客户端,你需要打开待上传的文件,将其内容读取到内存中。考虑到文件大小可能较大,通常采用流式读取,并将文件分块,每一块作为一个数据包发送。 4. **错误处理**:在实际操作中...
在Android应用开发中,有时我们需要将一些系统配置信息存储在外部文件中,以方便管理和更新。在这种情况下,`ini`文件格式是一个常见的选择,因为它的结构简单,易于读写。本文将详细介绍如何在Android项目中读取...
Android 使用 AudioRecord 和 AudioTrack 完成音频PCM数据的采集和播放,并读写音频wav文件。 封装好的Java代码,可同时录制...PCM是原始音频数据,WAV是windows中常见的音频格式,只是在pcm数据中添加了一个文件头。
在Android环境中,通过JNI调用libzip库可以实现原生层对ZIP文件的操作,这在处理大量数据或者需要高效读取压缩文件的场景下非常有用。 首先,你需要在Android项目的jniLibs目录下添加libzip库的.so文件,确保它们...
在提供的"FilePass"压缩包文件中,可能包含了实现上述功能的示例代码或工具类。解压并研究这些文件可以帮助你更好地理解和实践Android设备间的Socket文件互传。不过,要注意的是,实际应用中还应考虑错误处理、网络...
数据以XML格式存储在文件中,易于读写。 2. **内部存储**:应用私有的存储空间,只有应用本身可以访问。用于存储敏感数据或者需要在应用生命周期内持久化的数据。 3. **外部存储**:对于大文件,如图片、音频和...
一旦数据存储在SQLite数据库中,我们可以使用Apache POI库来生成Excel文件。Apache POI是一个用于处理Microsoft Office格式文件的开源Java库,支持HSSF(处理.xls文件)和XSSF(处理.xlsx文件)。在Android项目中,...
本篇文章将探讨如何在Android应用中实现AES加密和解密文件,以确保数据的安全性。 首先,我们需要了解AES的工作原理。AES是一种分组密码,它使用相同的密钥进行加密和解密,具有128位的块大小,并支持128、192和256...
它将数据保存在XML文件中,通常位于应用的私有目录下。下面是如何使用SharedPreferences进行读写操作: 1. **写入配置文件**: - 获取SharedPreferences实例:通常在Activity或Fragment中,通过`...
在Android系统中,创建文件并进行读写操作是应用程序中常见的功能,比如保存用户设置、存储游戏进度或者缓存网络数据。以下将详细介绍如何在Android环境中实现这些操作。 首先,要创建一个文件,你需要获得一个File...
本篇将详细讲解如何在Android应用中使用Socket进行文件的上传和下载操作。 首先,理解Socket的基本概念:Socket是应用程序与网络协议之间的接口,它允许两个网络应用程序通过TCP/IP协议进行通信。在Android中,我们...
在Android应用开发中,文件上传和文件选择器是常见的功能需求。用户可能需要从设备存储中选择一个或多个文件,例如图片、文档或音频文件,然后上传到服务器或进行其他操作。本文将深入探讨如何在Android平台上实现...
在Android应用开发中,本地数据存储是至关重要的一个环节,特别是在处理用户数据或者应用程序需要持久化数据时。本文将深入探讨Android系统中的文件存储机制,包括如何读取、写入、重写和删除.txt格式的文件。理解...
在Android应用开发中,有时我们需要从本地存储的JSON文件中读取数据,这通常涉及到文件I/O操作和字符编码处理。以下将详细讲解如何在Android中读取本地JSON文件,并解决可能出现的显示乱码问题。 1. **读取本地JSON...
在Android应用开发中,有时需要处理大量的结构化数据,这时Excel文件就成为一个理想的存储选择,因为它们便于人类阅读,同时也方便程序进行数据处理。本文将详细介绍如何在Android中实现Excel文件的读取与写入。 ...
在Android开发中,文件复制和进度条的显示是常见的需求,尤其在移动应用中,用户可能需要将数据从一个位置移动到另一个位置,或者在后台下载文件时展示进度。`ProgressDialog`是Android SDK提供的一种对话框组件,...
在Java和Android开发中,有时会遇到需要处理各种类型的文件,包括`.dat`文件。`.dat`文件本身没有特定的格式,它通常被用来存储任意数据,由创建它的应用程序定义结构。本篇将深入探讨如何在Java和Android环境中读取...