您当前的位置:首页 > 互联网教程

如何往android中添加数据库

发布时间:2025-05-24 07:00:08    发布人:远客网络

如何往android中添加数据库

一、如何往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对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。