android数据库共享
1. Android绯荤粺涓镄勬暟鎹瀛桦偍链夊摢浜涙柟寮
Android绯荤粺涓镄勬暟鎹瀛桦偍链夊摢浜涙柟寮忥纻
Android鏄鐩鍓嶅叏鐞冧娇鐢ㄦ渶骞挎硾镄勭Щ锷ㄦ搷浣灭郴缁熶箣涓锛屽叾寮哄ぇ镄勬暟鎹瀛桦偍链哄埗浣垮缑寮鍙戣呭彲浠ヨ交𨱒惧湴灏嗙敤鎴锋暟鎹淇濆瓨鍦ㄨ惧囦腑锛屼互渚垮簲鐢ㄧ▼搴忛殢镞跺彲浠ヨ诲彇鍜屽啓鍏ャ傞偅涔埚湪Android涓锛屾暟鎹瀛桦偍鍙堟湁鍝浜涙柟寮忓憿锛
1.SharedPreferences
SharedPreferences鏄疉ndroid涓鐢ㄤ簬淇濆瓨杞婚噺绾ч敭鍊煎规暟鎹镄勫伐鍏凤纴鍙浠ョ敤浜庝缭瀛樼敤鎴风殑棣栭夐”璁剧疆銆佺橱褰曚俊鎭銆佸簲鐢ㄧ▼搴忛厤缃绛夐渶姹伞傚畠锘轰簬XML鏂囦欢瀹炵幇锛屽彲浠ュ疄鐜板揩阃熺殑璇诲啓镎崭綔锛岄傚悎瀛桦偍涓浜涚亩鍗旷殑鏁版嵁銆
2.sqlite鏁版嵁搴
SQLite鏄涓绉嶈交鍨嬫暟鎹搴掳纴甯哥敤浜庡湪绉诲姩璁惧囦腑瀛桦偍缁撴瀯鍖栨暟鎹锛屽寘𨰾鐢ㄦ埛璐︽埛淇℃伅銆佽仈绯讳汉銆佹秷鎭璁板綍銆佹棩铡嗙瓑銆係QLite鏁版嵁搴揿唴缃浜峣ndroid绯荤粺涓锛屾彁渚涗简澶ч噺镄𪞝PI鎺ュ彛锛屼娇寰楀紑鍙戜汉锻桦彲浠ヨ交𨱒惧湴杩涜屾暟鎹镄勫瓨鍌ㄥ拰璁块梾銆
3.鏂囦欢瀛桦偍
Android鎻愪緵浜嗕竴绉嶅熀浜庢枃浠剁殑鏁版嵁瀛桦偍鏂规硶锛屽彲浠ュ皢鏁版嵁淇濆瓨鍦ㄨ惧囩殑鍐呯疆瀛桦偍鍣ㄦ垨澶栭儴瀛桦偍鍣ㄤ笂锛屼互鏂囦欢褰㈠纺杩涜屽瓨鍌ㄣ傛ょ嶆柟寮忛傜敤浜庡瓨鍌ㄤ竴浜涢潪缁撴瀯鍖栨暟鎹锛屼緥濡傚浘鐗囥侀煶棰戙佽嗛戠瓑銆
4.ContentProvider
ContentProvider鏄涓绉嶅疄鐜痨ndroid鏁版嵁鍏变韩镄勬満鍒讹纴鍏佽镐笉钖屽簲鐢ㄧ▼搴忎箣闂村叡浜鏁版嵁銆备篃鍙浠ュ湪澶氢釜缁勪欢涔嬮棿鍏变韩鏁版嵁锛屼緥濡傚湪Activity鍜孲ervice涔嬮棿鍏变韩鏁版嵁銆侰ontentProvider阃氩父鐢ㄤ簬瀛桦偍闱炲父閲嶈佺殑鏁版嵁锛屼緥濡傝仈绯讳汉淇℃伅銆佹棩铡嗕簨浠躲佸獟浣撴枃浠剁瓑銆
5.RoomPersistenceLibrary
RoomPersistenceLibrary鏄疓oogle鍦ˋndroid骞冲彴涓娄负寮鍙戜汉锻樻彁渚涚殑涓绉嶈交閲忕骇銆佺亩娲佺殑ORM妗嗘灦锛岀敤浜庣$悊SQLite鏁版嵁搴扑腑镄勭粨鏋勫寲鏁版嵁銆俣oom搴撶亩鍖栦简Android搴旂敤绋嫔簭涓鏁版嵁镄勫勭悊锛屼粠钥屼娇寰楀紑鍙戜汉锻桦彲浠ヨ交𨱒惧湴杩涜屽畨鍏ㄣ佷竴镊村拰楂樻晥镄勬暟鎹瀛桦偍镎崭綔銆
缁间笂镓杩帮纴Android鎻愪緵浜嗗氱嶆暟鎹瀛桦偍鏂瑰纺锛屽紑鍙戜汉锻桦彲浠ユ牴鎹闇姹傝繘琛岄夋嫨锛屼緥濡係haredPreferences阃傜敤浜庡瓨鍌ㄨ交閲忕骇镄勬暟鎹锛孲QLite鏁版嵁搴挞傜敤浜庡瓨鍌ㄧ粨鏋勫寲鏁版嵁锛屾枃浠跺瓨鍌ㄩ傜敤浜庡瓨鍌ㄥぇ鍨嫔獟浣撴枃浠讹纴ContentProvider阃傜敤浜庡疄鐜板叡浜鏁版嵁锛岃孯oomPersistenceLibrary鍒欐槸涓绉岖亩渚跨殑ORM妗嗘灦锛岄傜敤浜庣$悊SQLite鏁版嵁搴扑腑镄勭粨鏋勫寲鏁版嵁銆傞夋嫨钖堥傜殑鏁版嵁瀛桦偍鏂瑰纺鍙浠ユ洿濂藉湴绠$悊鍜岀淮鎶Android搴旂敤绋嫔簭涓镄勬暟鎹銆
可以按以下步骤进行:
Android应用的数据库一般都是私有的,其他应用无法访问,那么怎么在手机已root的前提下,在自己的应用中读取指定应用中的数据信息呢,现提供一种思路。
以uc浏览器历史浏览记录为例:
一:对手机进行root。
某些厂家的Android设备是支持在系统设置中一键root的,如魅族手机。更通用的情况下一般是用第三方软件进行root,如KingRoot。
二:在手机上安装RootExplorer。
RootExplorer是在Android上使用很方便的文件浏览器,借用它,我们可以找到uc浏览器的历史记录数据库所在为data/data/com.UCMobile/databases/history/history。
三:将数据库文件复制到sd卡指定目录。
四:从sd卡数据库文件中读取数据。
五:将数据加载到Recyclerview中展示。
至此,我们已经实现了在自己应用中读取其他应用数据库数据的一个完整过程,诚然这种方式存在许多局限性,但不失为解决方案的一种。
3. Android开发如何将自己储存在数据库的数据同程序一起传输
可以将XX.db文件复制到Eclipse Android工程中的res\raw目录中。所有在res\raw目录中的文件不会被压缩,这样可以直接提取该目录中的文件数据存储这块分为两部分,一部分是服务端,一部分是客户端
客户端的存储很简单,现在一般用sqllite,也可以直接使用SharedPreferences。
服务端的存储就很复杂了。你要学习jdbc的知识和数据库的知识,如oracle,sqlserver,mysql之类的、 自己写一个方法,点击或者启动的时候,采用JDBC一条条的取数据来同步。如果有时间戳的列,那么你很好同步。 2. 我们采用的是,Local和服务器都采用SQLLite。需要同步的时候,直接把服务器的DB文件给拷贝下来,放到Local就可以了。至于提交到1、运行输入 adb shell (前提是模拟器正在运行)。
2、进入命令界面后 输入 ls 指令 会列出文件的目录。
3、cd 进入你想要的目录里。
4、一层一层进去后会发现 databases目录 你的数据文件就在这个目录下放着。
5、sqlite3 test (test就是你创建的数据库的名称 注意:不要加.db 后缀)。
6、现在你就进入你创建的test数据库了使用 .tables 就可以查看所有的表了。你有用什么执行或者编写数据库软件吗? 我一般用PL/SQL。如果你有软件你就把创表和添加数据的数据库文件导出(如何导出可以根据你用的软件网络下下哦)到一个txt或者其它类型的文件里面然后一起放到你将打包的项目文件中一起打包就可以了。命名的时候让别人一看就知道是数据库文件就可以了
4. 如何android多Activity间共享数据
Android应用开发中,给我们提供了5种数据的存储方式
1 使用SharedPreferences存储数据
2 文件存储数据
3 SQLite数据库存储数据
4 使用ContentProvider存储数据
5 网络存储数据
不同的业务逻辑,或者需求,用不同的实现方式
以下是这几中数据存储方式的说明用及法,
第一种: 使用SharedPreferences存储数据
SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,
一般在Activity中 重载窗口状态onSaveInstanceState保存一般使用SharedPreferences完成,
它提供了Android平台常规的Long长 整形、Int整形、String字符串型的保存。
它是什么样的处理方梁宴式呢? SharedPreferences类似过去Windows系统上的ini配置文件,但是它分为多种权限,
可以全局共享访问,android123提示最终是以xml方式来保存,整体效率来看不是特别的高,
对于常规的轻量级而言比SQLite要好不少,如果真的存储量不大可以考虑自己定义文件格式。
xml 处理时Dalvik会通过自带底层的本地XML Parser解析,比如XMLpull方式,这样对于内存资源占用比较好。
它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。
其存储位置在/data/data/< >/shared_prefs目录下。
SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。
实现SharedPreferences存储的步骤如下:
一、根据Context获取SharedPreferences对象
二、利用edit()方法获取Editor对象。
三、通过Editor对象存储key-value键值对数据。
四、通过commit()方法提交数据。
下面是示例代码:
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//获取SharedPreferences对象
Context ctx = MainActivity.this;
SharedPreferences sp = ctx.getSharedPreferences("SP", MODE_PRIVATE);
//存入数据
Editor editor = sp.edit();
editor.putString("STRING_KEY", "string");
editor.putInt("INT_KEY", 0);
editor.putBoolean("BOOLEAN_KEY", true);
editor.commit();
//返回STRING_KEY的值
Log.d("SP", sp.getString("STRING_KEY", "none"));
//如果NOT_EXIST不存在,则返回值为"none"
Log.d("SP", sp.getString("NOT_EXIST", "none"));
}
}
这段代码执行过后,即在/data/data/com.test/shared_prefs目录下生成了一个SP.xml文件,一个应用可以创建多个这样的xml文件。
SharedPreferences对象与SQLite数据库相比,免去了创建数据库,创建表,写SQL语句等诸多操作,相对而言更加方便,简洁。
但是SharedPreferences也有其自身缺陷,比如其职能存储boolean,int,float,long和String五种简单的数据类型,比如滚行其无法进行条件查询等。
所以不论SharedPreferences的数据存储操作是如何简单,它也大渣哗只能是存储方式的一种补充,而无法完全替代如SQLite数据库这样的其他数据存储方式。
第二种: 文件存储数据
关于文件存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的。
文件可用来存放大量数据,如文本、图片、音频等。
默认位置:/data/data/< >/files/***.***。
代码示例:
public void save(){
try {
FileOutputStream outStream=this.openFileOutput("a.txt",Context.MODE_WORLD_READABLE);
outStream.write(text.getText().toString().getBytes());
outStream.close();
Toast.makeText(MyActivity.this,"Saved",Toast.LENGTH_LONG).show();
} catch (FileNotFoundException e) {
return;
}
catch (IOException e){
return ;
}
}
openFileOutput()方法的第一参数用于指定文件名称,不能包含路径分隔符“/” ,如果文件不存在,Android 会自动创建它。
创建的文件保存在/data/data//files目录,如: /data/data/cn.itcast.action/files/itcast.txt ,
通过点击Eclipse菜单“Window”-“Show View”-“Other”,在对话窗口中展开android文件夹,
选择下面的File Explorer视图,然后在File Explorer视图中展开/data/data//files目录就可以看到该文件。
openFileOutput()方法的第二参数用于指定操作模式,有四种模式,分别为:
Context.MODE_PRIVATE = 0
Context.MODE_APPEND = 32768
Context.MODE_WORLD_READABLE = 1
Context.MODE_WORLD_WRITEABLE = 2
Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;
MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
如果希望文件被其他应用读和写,可以传入: openFileOutput("itcast.txt", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE); android有一套自己的安全模型,当应用程序(.apk)在安装时系统就会分配给他一个userid,当该应用要去访问其他资源比如文件的时候,就需要userid匹配。默认情况下,任何应用创建的文件,sharedpreferences,数据库都应该是私有的(位于/data/data//files),其他程序无法访问。
除非在创建时指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE ,只有这样其他程序才能正确访问。
读取文件示例:
public void load(){
try {
FileInputStream inStream=this.openFileInput("a.txt");
ByteArrayOutputStream stream=new ByteArrayOutputStream();
byte[] buffer=new byte[1024];
int length=-1;
while((length=inStream.read(buffer))!=-1) {
stream.write(buffer,0,length);
}
stream.close();
inStream.close();
text.setText(stream.toString());
Toast.makeText(MyActivity.this,"Loaded",Toast.LENGTH_LONG).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e){
return ;
}
}
对于私有文件只能被创建该文件的应用访问,
如果希望文件能被其他应用读和写,
可以在创建文件时,指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE权限。
Activity还提供了getCacheDir()和getFilesDir()方法: g
etCacheDir()方法用于获取/data/data//cache目录 getFilesDir()方法用于获取/data/data//files目录。
把文件存入SDCard:
使用Activity的openFileOutput()方法保存文件,文件是存放在手机空间上,
一般手机的存储空间不是很大,存放些小文件还行,如果要存放像视频这样的大文件,是不可行的。
对于像视频这样的大文件,我们可以把它存放在SDCard。
SDCard是干什么的?你可以把它看作是移动硬盘或U盘。
在模拟器中使用SDCard,你需要先创建一张SDCard卡(当然不是真的SDCard,只是镜像文件)。
创建SDCard可以在Eclipse创建模拟器时随同创建,也可以使用DOS命令进行创建,
如下: 在Dos窗口中进入android SDK安装路径的tools目录,
输入以下命令创建一张容量为2G的SDCard,文件后缀可以随便取,
建议使用.img: mksdcard 2048M D:\AndroidTool\sdcard.img 在程序中访问SDCard,你需要申请访问SDCard的权限。
在AndroidManifest.xml中加入访问SDCard的权限如下:
<!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
要往SDCard存放文件,程序必须先判断手机是否装有SDCard,并且可以进行读写。
注意:访问SDCard必须在AndroidManifest.xml中加入访问SDCard的权限。
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File sdCardDir = Environment.getExternalStorageDirectory();//获取SDCard目录
File saveFile = new File(sdCardDir, “a.txt”);
FileOutputStream outStream = new FileOutputStream(saveFile);
outStream.write("test".getBytes());
outStream.close();
}
Environment.getExternalStorageState()方法用于获取SDCard的状态,如果手机装有SDCard,并且可以进行读写,那么方法返回的状态等于Environment.MEDIA_MOUNTED。
Environment.getExternalStorageDirectory()方法用于获取SDCard的目录,当然要获取SDCard的目录,你也可以这样写:
File sdCardDir = new File("/sdcard"); //获取SDCard目录
File saveFile = new File(sdCardDir, "itcast.txt");
//上面两句代码可以合成一句:
File saveFile = new File("/sdcard/a.txt");
FileOutputStream outStream = new FileOutputStream(saveFile);
outStream.write("test".getBytes());
outStream.close();
第三种: SQLite数据库存储数据
SQLite是轻量级嵌入式数据库引擎,它支持 SQL 语言,
并且只利用很少的内存就有很好的性能。
此外它还是开源的,任何人都可以使用它。
许多开源项目((Mozilla, PHP, Python)都使用了 SQLite
SQLite 由以下几个组件组成:SQL 编译器、内核、后端以及附件。
SQLite 通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展 SQLite 的内核变得更加方便。
特点:
面向资源有限的设备,
没有服务器进程,
所有数据存放在同一文件中跨平台,
可自由复制。
SQLite 基本上符合 SQL-92 标准,和其他的主要 SQL 数据库没什么区别。它的优点就是高效,Android 运行时环境包含了完整的 SQLite。
SQLite 和其他数据库最大的不同就是对数据类型的支持,创建一个表时,可以在 CREATE TABLE 语句中指定某列的数据类型,但是你可以把任何数据类型放入任何列中。当某个值插入数据库时,SQLite 将检查它的类型。如果该类型与关联的列不匹配,则 SQLite 会尝试将该值转换成该列的类型。如果不能转换,则该值将作为其本身具有的类型存储。比如可以把一个字符串(String)放入 INTEGER 列。SQLite 称这为“弱类型”(manifest typing.)。 此外,SQLite 不支持一些标准的 SQL 功能,特别是外键约束(FOREIGN KEY constrains),嵌套 transcaction 和 RIGHT OUTER JOIN 和 FULL OUTER JOIN, 还有一些 ALTER TABLE 功能。 除了上述功能外,SQLite 是一个完整的 SQL 系统,拥有完整的触发器,交易等等。
Android 集成了 SQLite 数据库 Android 在运行时(run-time)集成了 SQLite,所以每个 Android 应用程序都可以使用 SQLite 数据库。
对于熟悉 SQL 的开发人员来时,在 Android 开发中使用 SQLite 相当简单。但是,由于 JDBC 会消耗太多的系统资源,所以 JDBC 对于手机这种内存受限设备来说并不合适。因此,Android 提供了一些新的 API 来使用 SQLite 数据库,Android 开发中,程序员需要学使用这些 API。
数据库存储在 data/< 项目文件夹 >/databases/ 下。 Android 开发中使用 SQLite 数据库 Activites 可以通过 Content Provider 或者 Service 访问一个数据库。
下面会详细讲解如果创建数据库,添加数据和查询数据库。 创建数据库 Android 不自动提供数据库。在 Android 应用程序中使用 SQLite,必须自己创建数据库,然后创建表、索引,填充数据。
Android 提供了 SQLiteOpenHelper 帮助你创建一个数据库,你只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。SQLiteOpenHelper 类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。
SQLiteOpenHelper 的子类,至少需要实现三个方法:
1 构造函数,调用父类 SQLiteOpenHelper 的构造函数。这个方法需要四个参数:上下文环境(例如,一个 Activity),数据库名字,一个可选的游标工厂(通常是 Null),一个代表你正在使用的数据库模型版本的整数。
2 onCreate()方法,它需要一个 SQLiteDatabase 对象作为参数,根据需要对这个对象填充表和初始化数据。
3 onUpgrage() 方法,它需要三个参数,一个 SQLiteDatabase 对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。
第四种 使用ContentProvider存储数据 ContentProvider其实也是通过数据库的方式来存储数据的,因此这里不再做详细介绍
第五种 网络存储数据 也就是说将数据保存在服务器,android上只需要通过httpclient发起一个请求,向服务器获取数据即可
5. 请问:android:一个应用程序在/data/下创建文件夹,其他的应用程序可以访问吗怎么实现
可以的。Android中各个应用程序组件之间是相互独立的,彼此的数据不能共享。为此,Android提供了ContentProvider组件来实现应用程序之间数据的共享。你可以看看ContentProvider的用法,其中包括了添加,删除,修改,查询等常用操作。