如何往android中添加数据库
发布时间:2025-05-24 07:00:08 发布人:远客网络
一、如何往android中添加数据库
(1)下载并安装 SQLite可视化管理工具(SQLite Expert Pro) v3.4.17破解版
(2)将你手头上的数据放到EXCEL表格中,保存为CSV格式的数据
(3)在此工具中按照你现有的数据格式新建数据库和表,如数据库为:contact.db,表为employee
(4)通过此工具菜单栏中Import/Export下的Import text file(CSV,TSC)功能,将你现有的CSV数据导入到你新建的数据表中(主要目的是省的一个一个的录入了)
二、在eclipse中新建一个android app工程,并在新建的工程文件夹点右键new->folder,在res文件夹下新建raw文件夹(如果有就不用新建了)
三、用鼠标将新建的SQLite数据库文件contact.db拖动到新建工程的res下的raw文件下,出现提示,选择copy
private static final String DATABASE_PATH="/data/data/你的主程序包路径(如:com.szair.contact)/databases";
private static final int DATABASE_VERSION= 0;
private static final String DATABASE_NAME="contact.db";
private static String outFileName= DATABASE_PATH+"/"+ DATABASE_NAME;
SQLiteDatabase db=SQLiteDatabase.openDatabase(outFileName, null,SQLiteDatabase.NO_LOCALIZED_COLLATORS);
String t="SELECT字段名1,字段名2 FROM employee WHERE**** ORDER BY***";
Cursor c=db.rawQuery(t, null);
String ziduan1=c.getString(0);//字段1的数据
String ziduan2=c.getString(1);//字段1的数据
------------------------------------------------
private void buildDatabase() throws Exception{
InputStream myInput= getResources().openRawResource(R.raw.sz_contact);
File file= new File(outFileName);
File dir= new File(DATABASE_PATH);
throw new Exception("创建失败");
OutputStream myOutput= new FileOutputStream(outFileName);
byte[] buffer= new byte[1024];
while((length= myInput.read(buffer))>0){
myOutput.write(buffer, 0, length);
按照以上方式,可以将外部建的SQLite数据库成功的发布出来
二、android 数据库怎么监听数据变化
1、在android中经常会用到改变数据库内容后再去使用数据库更新的内容,很多人会重新去query一遍,但是这样的问题就是程序会特别占内存,而且有可能会搂关cursor而导致程序内存未释放等等。其实android内部提供了一种ContentObserver的东西来监听数据库内容的变化。
2、ContentObserver的构造函数需要一个参数Hanlder,因为ContentObserver内部使用了一个实现Runnable接口的内部类NotificationRunnable,来实现数据库内容的变化。需要使用hanlder去post消息。注册ContentObserver的方法是:getContentResolver().registerContentObserver(uri, notifyForDescendents, observer).
3、上面3个参数为:uri----Uri类型,是需要监听的数据库的uri.
4、notifyForDescendents---boolean true的话就会监听所有与此uri相关的uri。false的话则是直接特殊的uri才会监听。一般都设置为true.
5、observer-----ContentObserver就是需要的contentobserver.
6、初始化一个ContentObserver对象,重载onChange(boolean),在这个方法里去操作数据库的使用,针对变化后的使用。
7、写了一个小demo,可以参考下。提示这种监听方式必须是contentprovider才能使用,因为contentprovider有uri.简单的那种sqlite数据库没有uri是使用不了的。
8、下面demo操作的是在一个activityA里点击button跳转至另外一个activityB,在B中点击button往数据库中加数据,加完后关闭B回到A。A的button的文字自动变化设置到数据库中的字符串。[code]
9、04importandroid.content.Intent;
10、05importandroid.database.ContentObserver;
11、09importandroid.widget.Button;
12、11publicclassListenDataTestextendsActivity{
13、15protectedvoidonCreate(BundlesavedInstanceState){
14、16super.onCreate(savedInstanceState);
15、17setContentView(R.layout.listen_data_test);
16、18getContentResolver().registerContentObserver(DataChangeProvider.CONTENT_URI,
17、21testBtn=(Button)findViewById(R.id.test_btn);
18、22testBtn.setOnClickListener(newView.OnClickListener(){
19、25Intentin=newIntent(ListenDataTest.this,DataChangeTest.class);
20、33privateContentObservercob=newContentObserver(newHandler()){
21、36publicbooleandeliverSelfNotifications(){
22、37returnsuper.deliverSelfNotifications();
23、41publicvoidonChange(booleanselfChange){
24、43testBtn.setText(DataUtils.getChangeName(getApplicationContext()));
25、51getContentResolver().unregisterContentObserver(cob);
26、04importandroid.content.ContentValues;
27、05importandroid.content.Intent;
28、06importandroid.database.ContentObservable;
29、07importandroid.database.ContentObserver;
30、11importandroid.widget.Button;
31、13publicclassDataChangeTestextendsActivity{
32、17protectedvoidonCreate(BundlesavedInstanceState){
33、18super.onCreate(savedInstanceState);
34、19setContentView(R.layout.data_change_test);
35、20dataBtn=(Button)findViewById(R.id.data_test_btn);
36、21mDataSqlite=newDataSqlite(this);
37、22dataBtn.setOnClickListener(newView.OnClickListener(){
38、25ContentValuescon=newContentValues();
39、26con.put("name","数据变化了");
40、27getContentResolver().insert(DataChangeProvider.CONTENT_URI,con);
41、004importandroid.content.ContentProvider;
42、005importandroid.content.ContentUris;
43、006importandroid.content.ContentValues;
44、007importandroid.content.Context;
45、008importandroid.content.UriMatcher;
46、009importandroid.database.Cursor;
47、010importandroid.database.SQLException;
48、011importandroid.database.sqlite.SQLiteDatabase;
49、012importandroid.database.sqlite.SQLiteOpenHelper;
50、013importandroid.database.sqlite.SQLiteQueryBuilder;
51、014importandroid.database.sqlite.SQLiteDatabase.CursorFactory;
52、016importandroid.text.TextUtils;
53、018publicclassDataChangeProviderextendsContentProvider{
54、019privateSQLiteOpenHelpermOpenHelper;
55、020privatestaticfinalintALARMS=1;
56、021privatestaticfinalintALARMS_ID=2;
57、022privatestaticfinalUriMatchersURLMatcher=newUriMatcher(UriMatcher.NO_MATCH);
58、023publicstaticfinalUriCONTENT_URI=Uri.parse("content://ty.com.lto/test");
59、026sURLMatcher.addURI("ty.com.lto","test",ALARMS);
60、027sURLMatcher.addURI("ty.com.lto","test/#",ALARMS_ID);
61、030privatestaticclassDatabaseHelperextendsSQLiteOpenHelper{
62、031privatestaticfinalStringTEST_DATABASE="test.db";
63、032privatestaticfinalintVERSION=1;
64、034publicDatabaseHelper(Contextcontext){
65、035super(context,TEST_DATABASE,null,VERSION);
66、036//TODOAuto-generatedconstructorstub
67、041publicvoidonCreate(SQLiteDatabasedb){
68、042Stringsql="CREATETABLE"+"test"+"("+
69、050publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){
70、051Stringsql="DROPTABLEIFEXIST"+TEST_DATABASE;
71、058publicDataChangeProvider(){
72、062publicintdelete(Uriurl,Stringwhere,String[]whereArgs){
73、063SQLiteDatabasedb=mOpenHelper.getWritableDatabase();
74、066switch(sURLMatcher.match(url)){
75、068count=db.delete("test",where,whereArgs);
76、071Stringsegment=url.getPathSegments().get(1);
三、android开发 数据库的使用
1、SQLite是轻量级嵌入式数据库引擎,它支持 SQL语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。许多开源项目((Mozilla, PHP, Python)都使用了 SQLite,SQLite由以下几个组件组成:SQL编译器、内核、后端以及附件。SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展 SQLite的内核变得更加方便。
2、面向资源有限的设备,没有服务器进程,所有数据存放在同一文件中跨平台,可自由复制。
3、SQLite基本上符合 SQL-92标准,和其他的主要 SQL数据库没什么区别。它的优点就是高效,Android运行时环境包含了完整的 SQLite。
4、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系统,拥有完整的触发器,交易等等。
5、Android集成了 SQLite数据库 Android在运行时(run-time)集成了 SQLite,所以每个 Android应用程序都可以使用 SQLite数据库。
6、对于熟悉 SQL的开发人员来时,在 Android开发中使用 SQLite相当简单。但是,由于 JDBC会消耗太多的系统资源,所以 JDBC对于手机这种内存受限设备来说并不合适。因此,Android提供了一些新的 API来使用 SQLite数据库,Android开发中,程序员需要学使用这些 API。
7、数据库存储在 data/<项目文件夹>/databases/下。 Android开发中使用 SQLite数据库 Activites可以通过 Content Provider或者 Service访问一个数据库。
8、下面会详细讲解如果创建数据库,添加数据和查询数据库。创建数据库 Android不自动提供数据库。在 Android应用程序中使用 SQLite,必须自己创建数据库,然后创建表、索引,填充数据。
9、Android提供了 SQLiteOpenHelper帮助你创建一个数据库,你只要继承 SQLiteOpenHelper类,就可以轻松的创建数据库。SQLiteOpenHelper类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。
10、SQLiteOpenHelper的子类,至少需要实现三个方法:
11、1构造函数,调用父类 SQLiteOpenHelper的构造函数。这个方法需要四个参数:上下文环境(例如,一个 Activity),数据库名字,一个可选的游标工厂(通常是 Null),一个代表你正在使用的数据库模型版本的整数。
12、2 onCreate()方法,它需要一个 SQLiteDatabase对象作为参数,根据需要对这个对象填充表和初始化数据。
13、3 onUpgrage()方法,它需要三个参数,一个 SQLiteDatabase对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。