最近项目需要通过电话号码查询归属地,决定直接在本地sqlite的数据库进行查询,没必要去访问网络(虽然最后还是决定还是将数据库放在服务器上
)
一 首先先将外部的sqlite数据库放入assets文件夹下面
注意:
必须是sqlite数据库(XXX.db),如果是access(XXX.mdb)的必须进行转换,网上有一些数据库转换器,或者使用SQLite Expert
二 创建AssetsDatabaseManager用来获得操作数据库的SQLiteDatabase
package com.ld.qmwj.dao.phonenumserach;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.AssetManager;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
/**
* This is a Assets Database Manager
* Use it, you can use a assets database file in you application
* It will copy the database file to "/data/data/[your application package name]/database" when you first time you use it
* Then you can get a SQLiteDatabase object by the assets database file
* @author RobinTang
* @time 2012-09-20
*
*
* How to use:
* 1. Initialize AssetsDatabaseManager
* 2. Get AssetsDatabaseManager
* 3. Get a SQLiteDatabase object through database file
* 4. Use this database object
*
* Using example:
* AssetsDatabaseManager.initManager(getApplication()); // this method is only need call one time
* AssetsDatabaseManager mg = AssetsDatabaseManager.getManager(); // get a AssetsDatabaseManager object
* SQLiteDatabase db1 = mg.getDatabase("db1.db"); // get SQLiteDatabase object, db1.db is a file in assets folder
* db1.??? // every operate by you want
* Of cause, you can use AssetsDatabaseManager.getManager().getDatabase("xx") to get a database when you need use a database
*/
public class AssetsDatabaseManager {
private static String tag = "QMWJ"; // for LogCat
private static String databasepath = "/data/data/%s/database"; // %s is packageName
// A mapping from assets database file to SQLiteDatabase object
private Map<String, SQLiteDatabase> databases = new HashMap<String, SQLiteDatabase>();
// Context of application
private Context context = null;
// Singleton Pattern
private static AssetsDatabaseManager mInstance = null;
/**
* Initialize AssetsDatabaseManager
* @param context, context of application
*/
public static void initManager(Context context){
if(mInstance == null){
mInstance = new AssetsDatabaseManager(context);
}
}
/**
* Get a AssetsDatabaseManager object
* @return, if success return a AssetsDatabaseManager object, else return null
*/
public static AssetsDatabaseManager getManager(){
return mInstance;
}
private AssetsDatabaseManager(Context context){
this.context = context;
}
/**
* Get a assets database, if this database is opened this method is only return a copy of the opened database
* @param dbfile, the assets file which will be opened for a database
* @return, if success it return a SQLiteDatabase object else return null
*/
public SQLiteDatabase getDatabase(String dbfile) {
if(databases.get(dbfile) != null){
Log.i(tag, String.format("Return a database copy of %s", dbfile));
return (SQLiteDatabase) databases.get(dbfile);
}
if(context==null)
return null;
Log.i(tag, String.format("Create database %s", dbfile));
String spath = getDatabaseFilepath();
String sfile = getDatabaseFile(dbfile);
File file = new File(sfile);
SharedPreferences dbs = context.getSharedPreferences(AssetsDatabaseManager.class.toString(), 0);
boolean flag = dbs.getBoolean(dbfile, false); // Get Database file flag, if true means this database file was copied and valid
if(!flag || !file.exists()){
file = new File(spath);
if(!file.exists() && !file.mkdirs()){
Log.i(tag, "Create \""+spath+"\" fail!");
return null;
}
if(!copyAssetsToFilesystem(dbfile, sfile)){
Log.i(tag, String.format("Copy %s to %s fail!", dbfile, sfile));
return null;
}
dbs.edit().putBoolean(dbfile, true).commit();
}
SQLiteDatabase db = SQLiteDatabase.openDatabase(sfile, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS);
if(db != null){
databases.put(dbfile, db);
}
return db;
}
private String getDatabaseFilepath(){
return String.format(databasepath, context.getApplicationInfo().packageName);
}
private String getDatabaseFile(String dbfile){
return getDatabaseFilepath()+"/"+dbfile;
}
private boolean copyAssetsToFilesystem(String assetsSrc, String des){
Log.i(tag, "Copy "+assetsSrc+" to "+des);
InputStream istream = null;
OutputStream ostream = null;
try{
AssetManager am = context.getAssets();
istream = am.open(assetsSrc);
ostream = new FileOutputStream(des);
byte[] buffer = new byte[1024];
int length;
while ((length = istream.read(buffer))>0){
ostream.write(buffer, 0, length);
}
istream.close();
ostream.close();
}
catch(Exception e){
e.printStackTrace();
try{
if(istream!=null)
istream.close();
if(ostream!=null)
ostream.close();
}
catch(Exception ee){
ee.printStackTrace();
}
return false;
}
return true;
}
/**
* Close assets database
* @param dbfile, the assets file which will be closed soon
* @return, the status of this operating
*/
public boolean closeDatabase(String dbfile){
if(databases.get(dbfile) != null){
SQLiteDatabase db = (SQLiteDatabase) databases.get(dbfile);
db.close();
databases.remove(dbfile);
return true;
}
return false;
}
/**
* Close all assets database
*/
static public void closeAllDatabase(){
Log.i(tag, "closeAllDatabase");
if(mInstance != null){
for(int i=0; i<mInstance.databases.size(); ++i){
if(mInstance.databases.get(i)!=null){
mInstance.databases.get(i).close();
}
}
mInstance.databases.clear();
}
}
}
在getDatabase中,第一次先将assets中的数据库拷贝到当前工程下(/data/data/[your application package name]/database/数据库名称)
以后就可以直接在database中获得该数据库的SQLiteDatabase,从而进行增删改查操作了
三 使用
// 初始化,只需要调用一次
AssetsDatabaseManager.initManager(getApplication());
// 获取管理对象,因为数据库需要通过管理对象才能够获取
AssetsDatabaseManager mg = AssetsDatabaseManager.getManager();
// 通过管理对象获取数据库
SQLiteDatabase db1 = mg.getDatabase("data.db");
// 对数据库进行操作
db1.execSQL("XXXXXX");
- 大小: 3.1 KB
分享到:
相关推荐
- **JDBC连接**:使用SQLite-JDBC或其他库,建立Android应用到SQLite数据库的连接。 - **查询操作**:使用JDBC的Statement或PreparedStatement对象执行SQL查询,获取数据。 - **加载到ArcGIS**:将查询结果转换为...
今天我们讲讲在android studio中利用数据库存储中的SQLiteOpenHelper()方法建立数据库 SQLiteOpenH elper中需要重载函数: onCreate( ):利用SQL语句,在系统中创建数据库(表)功能 onUpgrade( ):利用SQL语句,...
本项目专注于在手机应用启动时预加载一个外部的SQLite数据库,以优化用户首次使用体验和减少应用程序的启动时间。 首先,我们要理解Flex 4.6在移动设备上的运行环境。Flex 4.6是Adobe AIR的一部分,它允许开发者...
总结来说,这个项目涉及到了使用Delphi进行Android应用开发的核心技术和SQLite数据库的集成应用,对于想要学习跨平台移动开发的Delphi程序员而言,这是一个很好的实践案例。通过深入理解并实践这个源码,你可以掌握...
今天我们讲讲在android studio中利用数据库存储中的SQLiteOpenHelper()方法建立数据库 SQLiteOpenHelper中需要重载函数: onCreate( ):利用SQL语句,在系统中创建数据库(表)功能 onUpgrade( ):利用SQL语句,在...
在Android中,通常使用SQLite作为本地数据库,它是一个轻量级的关系型数据库,适用于移动设备。然而,当需要与远程SQL Server或MySQL服务器交互时,我们就需要寻找其他解决方案。这时,jtds库就派上了用场。 jtds是...
标题中的“数据库建立在sdcard的个人日记”指的是在Android设备的外部存储(通常是SD卡)上创建一个SQLite数据库来存储个人日记条目。SQLite是一个轻量级的关系型数据库管理系统,广泛应用于移动设备,因为它不需要...
在这个实例中,我们将深入探讨如何使用 Android 的 SQLite 数据库,以及如何通过 SQLiteOpenHelper 类进行增删查改操作。 1. **SQLiteOpenHelper 类的使用** SQLiteOpenHelper 是 Android 提供的一个关键类,用于...
SQLite数据库的建立包括创建数据库文件和定义表结构,常用的操作有增、删、改、查。通过SQLiteOpenHelper类,开发者可以方便地管理数据库版本,执行SQL语句进行数据操作。 ContentProvider是Android提供的一种数据...
本篇将详细介绍如何在Android中对SQLite数据库进行基本操作,包括创建数据库、创建表、插入数据、查询数据、更新数据以及删除数据。 首先,创建数据库。在Android中,我们通常会创建一个SQLiteOpenHelper的子类,这...
2. **SQLite数据库连接**:在Android中,我们通常使用SQLite作为本地数据库。首先,我们需要加载SQLite JDBC驱动并建立与数据库的连接。这可以通过`Class.forName()`加载驱动类,然后使用`DriverManager.get...
使用SQLite数据库浏览器,用户可以进行以下操作: 1. **连接数据库**:输入SQLite数据库文件路径,建立连接。 2. **浏览表**:查看数据库中的所有表,包括表结构(字段名、数据类型等)。 3. **查询数据**:编写SQL...
3. **数据库(MySQL)**:虽然Android原生支持SQLite作为本地数据库,但在这个项目中选择了MySQL。MySQL是一种流行的开源关系型数据库管理系统,常用于服务器端。通过建立RESTful API,客户端可以发送HTTP请求来与...
### Android数据库技术详解 #### 一、引言 ...通过本文对Android数据库技术的详细介绍,希望能够帮助开发者更好地理解Android数据库管理的相关概念和技术要点,从而在实际项目中做出更加合理的选择。
在C#环境中,SQLite的集成通常依赖于SQLite.NET这样的第三方库,它提供了一套易于使用的API来操作SQLite数据库。在这个示例中,开发者可能已经包含了sqlite3.dll,这是SQLite的C接口动态链接库,通过P/Invoke技术在...
Android系统内置了SQLite数据库,它是一个轻量级的关系型数据库,适用于存储应用程序中的结构化数据。SQLite支持SQL语法,可以进行数据查询、更新、插入和删除操作。在Android中,我们通过SQLiteOpenHelper类来创建...
首先,我们需要了解Android中的SQLite数据库,它是Android系统内置的关系型数据库,轻量级且易于使用。 **1. SQLite 数据库介绍** SQLite是一个开源的嵌入式SQL数据库引擎,无需单独的服务器进程,可以直接在应用...
本文详细介绍了如何在Android环境下使用SQLite数据库。通过自定义的SQLite JDBC驱动,可以轻松地实现数据库连接、执行SQL语句以及处理结果集等功能。这为Android开发者提供了极大的便利,使得在移动设备上进行高效...
9. 跨进程共享:Android的ContentProvider组件可以暴露SQLite数据库,使得不同应用间能安全地共享数据。 10. ORM框架:为了简化数据库操作,开发者可以使用ORM(Object-Relational Mapping)框架,如ORMLite、...
综上所述,这个项目涉及到了Android应用开发中的SQLite数据库使用,特别是如何在SD卡上创建和管理数据库,以及如何设计和操作日记数据表。同时,也提示了权限管理和数据备份恢复的概念。开发者需要关注数据安全,...