android的系统数据库在调用的时候都封装了 我们只需要写where的condition,表结构和标明对我们都是不透明的 这就对深入了解带来了很多麻烦,即使有源码查看起来也很费劲。
android使用的是sqlite数据库,一般都是每个模块都有一个db文件,我们可以将系统里的db文件拷出来在使用android tool中的sqlite3命令来 *** 作和测试数据库。
首先启动模拟器或将手机连接电脑
使用find命令将系统中所有的db文件找出来
adb shell find / -name 'db' -type f
/mnt/sdcard/openfeint/webui/manifestdb
/mnt/sdcard/dbms/DBMSdb
/data/system/accountsdb
/data/data/comandroidvending/databases/assets14db
/data/data/comandroidvending/databases/suggestionsdb
/data/data/comandroidvending/databases/webviewCachedb
/data/data/comandroidvending/databases/webviewdb
/data/data/comandroidvending/databases/billing4db
/data/data/comandroidprovidersuserdictionary/databases/user_dictdb
/data/data/comandroidproviderstelephony/databases/mmssmsdb
/data/data/comandroidproviderstelephony/databases/telephonydb
/data/data/comandroidproviderssettings/databases/settingsdb
/data/data/comandroidprovidersmedia/databases/internaldb
/data/data/comandroidprovidersmedia/databases/external-bd717cb2db
/data/data/comandroidprovidersmedia/databases/external-5c2507fedb
/data/data/comandroidlauncher/databases/launcherdb
/data/data/comexampleandroidapis/databases/webviewCachedb
/data/data/comexampleandroidapis/databases/webviewdb
/data/data/comeclipsimgpsstatus2/databases/google_analyticsdb
/data/data/comeclipsimgpsstatus2/databases/webviewCachedb
/data/data/comeclipsimgpsstatus2/databases/webviewdb
/data/data/comandroidinputmethodlatin/databases/userbigram_dictdb
/data/data/comandroidinputmethodlatin/databases/auto_dictdb
/data/data/comgoogleandroidgsf/databases/talkdb
/data/data/comgoogleandroidgsf/databases/webviewCachedb
/data/data/comgoogleandroidgsf/databases/webviewdb
/data/data/comgoogleandroidgsf/databases/googlesettingsdb
/data/data/comgoogleandroidgsf/databases/subscribedfeedsdb
/data/data/comgoogleandroidgsf/databases/gservicesdb
/data/data/comgoogleandroidgsf/databases/glsdb
/data/data/comgoogleandroidgooglequicksearchbox/databases/qsb-logdb
/data/data/comgoogleandroidgm/databases/downloadsdb
/data/data/comgoogleandroidgm/databases/mailstoreqinjiangli85@gmailcomdb
/data/data/comgoogleandroidgm/databases/gmaildb
/data/data/comgoogleandroidappsgeniegeniewidget/databases/weatherdb
/data/data/comcoolirismedia/databases/launcherdb
/data/data/comcoolirismedia/databases/picasadb
/data/data/comandroidemail/databases/EmailProviderBodydb
/data/data/comandroidemail/databases/EmailProviderdb
/data/data/comandroidprovidersdrm/databases/drmdb
/data/data/comgetsetgamesmegajump/databases/google_analyticsdb
/data/data/comgetsetgamesmegajump/databases/webviewCachedb
/data/data/comgetsetgamesmegajump/databases/webviewdb
/data/data/comandroidprovidersdownloads/databases/downloadsdb
/data/data/comrichwebviewtest/databases/webviewCachedb
/data/data/comrichwebviewtest/databases/webviewdb
/data/data/comandroiddeskclock/databases/alarmsdb
/data/data/comandroidproviderscontacts/databases/contacts2db
/data/data/comandroidproviderscalendar/databases/calendardb
/data/data/comandroidbrowser/app_icons/WebpageIconsdb
/data/data/comandroidbrowser/app_geolocation/CachedGeopositiondb
/data/data/comandroidbrowser/app_databases/Databasesdb
/data/data/comandroidbrowser/app_appcache/ApplicationCachedb
/data/data/comandroidbrowser/databases/browserdb
/data/data/comandroidbrowser/databases/webviewCachedb
/data/data/comandroidbrowser/databases/webviewdb
/data/data/comandroidbluetooth/databases/btoppdb
有了个db文件列表我们就可以把这些db 复制到电脑上进行 *** 作了
以通讯录数据库为例执行以下 *** 作:
adb pull /data/data/comandroidproviderscontacts/databases/contacts2db F:/androidres/systemdb
--1669 KB/s (271360 bytes in 0158s)
F:/androidres/systemdb为任意本地目录 不明白pull命令的查看adb help
用sqlite3打开这个文件
F:/androidres/systemdb>sqlite3 contacts2db
SQLite version 3622
Enter "help" for instructions
Enter SQL statements terminated with a ";"
sqlite> tables
_sync_state settings
_sync_state_metadata status_updates
accounts v1_settings
activities view_contacts
agg_exceptions view_contacts_restricted
android_metadata view_data
calls view_data_restricted
contact_entities_view view_groups
contact_entities_view_restricted view_raw_contacts
contacts view_raw_contacts_restricted
data view_v1_contact_methods
groups view_v1_extensions
mimetypes view_v1_group_membership
name_lookup view_v1_groups
nickname_lookup view_v1_organizations
packages view_v1_people
phone_lookup view_v1_phones
properties view_v1_photos
raw_contacts
RAW是相机拍摄的原始文件,包含所有的摄影信息,方便后期来调整用的,严格来说这并不是一种各式,而是一种数据库各式,里面是包含了各种拍摄时候的数据而已。不过其实手机用RAW没太大必要,RAW各式直接观看的话整体画面偏灰,没有空间感,这是为了保存更多调整空间
把文件放在res/raw下,程序运行时把它释放到指定目录,代码如下:(供楼主参考)
private final String DATABASE_PATH = androidosEnvironmentgetExternalStorageDirectory()getAbsolutePath() + "/db_exam";
private final String DATABASE_FILENAME = "teldb";
public void extractDBFileFromRes(){
try {
String dbFileName = DATABASE_PATH + "/" + DATABASE_FILENAME;
File dir = new File(DATABASE_PATH);
if (!direxists()){
dirmkdir();
Logi("SQLite", "dir made:" + DATABASE_PATH);
} else {
Logi("SQLite", "dir exist:" + DATABASE_PATH);
}
try {
//如果数据库已经在SD卡的目录下存在,那么不需要重新创建,否则创建文件,并拷贝/res/raw下面的数据库文件
if (!(new File(dbFileName)exists())){
Logi("SQLite", dbFileName + ":file not exist");
//res/raw数据库作为输出流
InputStream inputStream = thisgetResources()openRawResource(Rrawtel);
//测试
int size = inputStreamavailable();
Logi("SQLite", "DATABASE_SIZE:" + 1);
Logi("SQLite", "count:" + 0);
//用于存放数据库信息的数据流
FileOutputStream fileOutputStream = new FileOutputStream(dbFileName);
byte[] buffer = new byte[8192];
int count = 0;
Logi("SQLite", "count:" + count);
//把数据写入SD卡目录下
while ((count = inputStreamread(buffer)) > 0 ) {
fileOutputStreamwrite(buffer, 0, count);
}
fileOutputStreamflush();
fileOutputStreamclose();
inputStreamclose();
}
} catch (FileNotFoundException e) {
Loge("Database", "File not found");
eprintStackTrace();
}
} catch (IOException e) {
Loge("Database", "IO exception");
eprintStackTrace();
}
}
sdk不能直接打开res\raw目录中的数据库文件,不过我们可以通过将这个文件复制到手机内存或sd卡上来访问。复制的方法也很简单,就是在程序第一次启动时判断要复制的目标路径是否存在该数据库文件,如果不存在该数据库文件,那先复制这个文件,然后再打开数据库文件。
复制数据库文件可以通过getresources()openrawresource方法获得res\raw目录中资源的inputstream对象,然后将该inputstream对象中的数据写入其他的目录中相应文件中。打开数据库可以使用sqlitedatabaseopenorcreatedatabase方法来打开sqlite数据库文件。openorcreatedatabase方法可以打开任意目录下的数据库文件。
以上就是关于安卓连接数据库问题,求解全部的内容,包括:安卓连接数据库问题,求解、手机里专业模式拍摄的“RAW是什么意思”、android里如何解析音频文件获取标题、专辑、文件名、艺术家等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)