Android创建和使用数据库详细指南(比较好)_第1页
Android创建和使用数据库详细指南(比较好)_第2页
Android创建和使用数据库详细指南(比较好)_第3页
Android创建和使用数据库详细指南(比较好)_第4页
Android创建和使用数据库详细指南(比较好)_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、android创建和使用数据库详细指南(1)每个应用程序都要使用数据,android应用程序也不例外,android使用开源的、与操作系统无关的sql数据库-sqlite,本文介绍的就是如何为你的android应用程序创建和操作sqlite数据库。数据库支持每个应用程序无论大小的生命线,除非你的应用程序只处理简单的数据,那么就需要一个数据库系统存储你的结构化数据,android使用sqlite数据库,它是一个开源的、支持多操作系统的sql数据库,在许多领域广泛使用,如mozilla firefox就是使用sqlite来存储配置数据的,iphone也是使用sqlite来存储数据的。在androi

2、d中,你为某个应用程序创建的数据库,只有它可以访问,其它应用程序是不能访问的,数据库位于android设备/data/data/ /databases文件夹中,在这篇文章中,你将会学习到如何在android中创建和使用数据库。sqlite数据库使用eclipse创建一个android项目,取名为database,如图1所示:图1 数据库-使用eclipse创建你的android新项目创建dbadapter辅助类操作数据库的最佳实践是创建一个辅助类,由它封装所有对数据库的复杂访问,对于调用代码而言它是透明的,因此我创建了一个dbadapter的辅助类,由它创建、打开、关闭和使用sqlite数据库

3、。首先,在src/ 文件夹(在这个例子中是src/net.learn2develop.database)下添加一个dbadapter.java文件。在dbadapter.java文件中,导入所有你要使用到的命名空间: package net.learn2develop.databases;import android.content.contentvalues;import android.content.context;import android.database.cursor;import android.database.sqlexception;import android.data

4、base.sqlite.sqlitedatabase;import android.database.sqlite.sqliteopenhelper;import android.util.log;public class dbadapter接下来创建一个数据库,取名为bookstitles,字段如图2所示。图2 数据库字段在dbadapter.java文件中,定义清单1中的常量。清单1 定义dbadapter.java文件中的常量package net.learn2develop.database;import android.content.contentvalues;import and

5、roid.content.context;import android.database.cursor;import android.database.sqlexception;import android.database.sqlite.sqlitedatabase;import android.database.sqlite.sqliteopenhelper;import android.util.log;public class dbadapterpublic static final string key_rowid = _id;public static final string k

6、ey_isbn = isbn;public static final string key_title = title;public static final string key_publisher = publisher;private static final string tag = dbadapter;private static final string database_name = books;private static final string database_table = titles;private static final int database_version

7、 = 1;private static final string database_create =create table titles (_id integer primary key autoincrement, + isbn text not null, title text not null, + publisher text not null);private final context context;database_create常量包括创建titles表的sql语句。在dbadapter类中,你可以扩展sqliteopenhelper类,它是一个android辅助类,主要用于

8、数据库创建和版本管理。实际上,你可以覆盖oncreate()和onupgrade()方法,如清单2所示。清单2 在dbadapter类中,扩展sqliteopenhelper类覆盖oncreate() 和 onupgrade()方法package net.learn2develop.database;import android.content.contentvalues;import android.content.context;import android.database.cursor;import android.database.sqlexception;import androi

9、d.database.sqlite.sqlitedatabase;import android.database.sqlite.sqliteopenhelper;import android.util.log;public class dbadapterpublic static final string key_rowid = _id;public static final string key_isbn = isbn;public static final string key_title = title;public static final string key_publisher =

10、 publisher;private static final string tag = dbadapter;private static final string database_name = books;private static final string database_table = titles;private static final int database_version = 1;private static final string database_create =create table titles (_id integer primary key autoinc

11、rement, + isbn text not null, title text not null, + publisher text not null);private final context context;private databasehelper dbhelper;private sqlitedatabase db;public dbadapter(context ctx)this.context = ctx;dbhelper = new databasehelper(context);private static class databasehelper extends sql

12、iteopenhelperdatabasehelper(context context)super(context, database_name, null, database_version);overridepublic void oncreate(sqlitedatabase db)db.execsql(database_create);overridepublic void onupgrade(sqlitedatabase db, int oldversion,int newversion)log.w(tag, upgrading database from version + old

13、version+ to + newversion + , which will destroy all old data);db.execsql(drop table if exists titles);oncreate(db);oncreate()方法创建一个新的数据库,onupgrade()方法用于升级数据库,这可以通过检查database_version常量定义的值来实现,对于onupgrade()方法而言,只不过是简单地删除表,然后在创建表而已。现在你可以定义不同的方法来打开和关闭数据库,如清单3中的添加/编辑/删除/行的函数。清单3 定义打开和关闭数据库以及增加/编辑/删除表中行的方

14、法public class dbadapter/././-打开数据库-public dbadapter open() throws sqlexceptiondb = dbhelper.getwritabledatabase();return this;/-关闭数据库-public void close()dbhelper.close();/-向数据库插入一个标题-public long inserttitle(string isbn, string title, string publisher)contentvalues initialvalues = new contentvalues()

15、;initialvalues.put(key_isbn, isbn);initialvalues.put(key_title, title);initialvalues.put(key_publisher, publisher);return db.insert(database_table, null, initialvalues);/-删除一个指定的标题-public boolean deletetitle(long rowid)return db.delete(database_table, key_rowid + = + rowid, null) 0;/-检索所有标题-public c

16、ursor getalltitles()return db.query(database_table, new string key_rowid,key_isbn,key_title,key_publisher,null,null,null,null,null);/-检索一个指定的标题-public cursor gettitle(long rowid) throws sqlexceptioncursor mcursor =db.query(true, database_table, new string key_rowid,key_isbn,key_title,key_publisher,k

17、ey_rowid + = + rowid,null,null,null,null,null);if (mcursor != null) mcursor.movetofirst();return mcursor;/-更新一个标题-public boolean updatetitle(long rowid, string isbn,string title, string publisher)contentvalues args = new contentvalues();args.put(key_isbn, isbn);args.put(key_title, title);args.put(ke

18、y_publisher, publisher);return db.update(database_table, args,key_rowid + = + rowid, null) 0;database;import android.content.contentvalues;import android.content.context;import android.database.cursor;import android.database.sqlexception;import android.database.sqlite.sqlitedatabase;import android.d

19、atabase.sqlite.sqliteopenhelper;import android.util.log;public class dbadapterpublic static final string key_rowid = _id;public static final string key_isbn = isbn;public static final string key_title = title;public static final string key_publisher = publisher;private static final string tag = dbad

20、apter;private static final string database_name = books;private static final string database_table = titles;private static final int database_version = 1;private static final string database_create =create table titles (_id integer primary key autoincrement, + isbn text not null, title text not null

21、, + publisher text not null);private final context context;private databasehelper dbhelper;private sqlitedatabase db;public dbadapter(context ctx)this.context = ctx;dbhelper = new databasehelper(context);private static class databasehelper extends sqliteopenhelperdatabasehelper(context context)super

22、(context, database_name, null, database_version);overridepublic void oncreate(sqlitedatabase db)db.execsql(database_create);overridepublic void onupgrade(sqlitedatabase db, int oldversion,int newversion)log.w(tag, upgrading database from version + oldversion+ to + newversion + , which will destroy a

23、ll old data);db.execsql(drop table if exists titles);oncreate(db);/-打开数据库-public dbadapter open() throws sqlexceptiondb = dbhelper.getwritabledatabase();return this;/-关闭数据库-public void close()dbhelper.close();/-向数据库中插入一个标题-public long inserttitle(string isbn, string title, string publisher)contentva

24、lues initialvalues = new contentvalues();initialvalues.put(key_isbn, isbn);initialvalues.put(key_title, title);initialvalues.put(key_publisher, publisher);return db.insert(database_table, null, initialvalues);/-删除一个指定标题-public boolean deletetitle(long rowid)return db.delete(database_table, key_rowid

25、 += + rowid, null) 0;/-检索所有标题-public cursor getalltitles()return db.query(database_table, new string key_rowid,key_isbn,key_title,key_publisher,null,null,null,null,null);/-检索一个指定标题-public cursor gettitle(long rowid) throws sqlexceptioncursor mcursor =db.query(true, database_table, new string key_row

26、id,key_isbn,key_title,key_publisher,key_rowid + = + rowid,null,null,null,null,null);if (mcursor != null) mcursor.movetofirst();return mcursor;/-更新一个标题-public boolean updatetitle(long rowid, string isbn,string title, string publisher)contentvalues args = new contentvalues();args.put(key_isbn, isbn);a

27、rgs.put(key_title, title);args.put(key_publisher, publisher);return db.update(database_table, args,key_rowid + = + rowid, null) 0;注意android使用cursor类返回一个需要的值,cursor作为一个指针从数据库查询返回结果集,使用cursor允许android更有效地管理它们需要的行和列,你使用contentvalues对象存储键/值对,它的put()方法允许你插入不同数据类型的键值。清单4显示了完整的dbadapter.java源代码。清单4 dbadapt

28、er.java完整源代码package net.learn2develop.android创建和使用数据库详细指南(2)2009-03-06 10:11 开心果 it168 我要评论(3) 字号:t | t每个应用程序都要使用数据,android应用程序也不例外,android使用开源的、与操作系统无关的sql数据库-sqlite,本文介绍的就是如何为你的android应用程序创建和操作sqlite数据库。ad: 使用数据库现在你已经可以利用创建的辅助类来使用数据库了,在databaseactivity.java文件中,创建一个dbadapter类的实例:package net.learn2d

29、evelop.database;import android.app.activity;import android.os.bundle;public class databaseactivity extends activity /* called when the activity is first created. */overridepublic void oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate);setcontentview(r.layout.main);dbadapter db =

30、new dbadapter(this);增加一个标题如果想在titles表中增加一个标题,可以使用dbadapter类的inserttitle()方法: overridepublic void oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate);setcontentview(r.layout.main);dbadapter db = new dbadapter(this);/-add 2 titles-db.open();long id;id = db.inserttitle(0470285818,c#

31、2008 programmers reference,wrox);id = db.inserttitle(047017661x,professional windows vista gadgets programming,wrox);db.close();inserttitle()方法返回插入行的id,如果在添加过程中遇到错误,它就返回-1。如果你分析android设备/模拟器的文件系统,你可以看到book数据库创建在database文件夹下,如图3所示。图3 database文件夹检索所有标题想要检索titles表中的所有标题,可以使用dbadapter类的getalltitles()方法,

32、如清单5所示。清单5 使用dbadapter类的getalltitles()方法检索titles表中的所有标题 package net.learn2develop.database;import android.app.activity;import android.database.cursor;import android.os.bundle;import android.widget.toast;public class databaseactivity extends activity /* called when the activity is first created. */ov

33、erridepublic void oncreate(bundle savedinstancestate)super.oncreate(savedinstancestate);setcontentview(r.layout.main);dbadapter db = new dbadapter(this);/-获取所有标题-db.open();cursor c = db.getalltitles();if (c.movetofirst()do displaytitle(c); while (c.movetonext();db.close();返回的结果是一个cursor对象,如果要显示所有标题,

34、你首先应该调用cursor对象的movetofirst()方法,如果它成功(意味着至少有一行有效),使用displaytitle()方法显示详细的标题,要移动到下一个标题,可以调用cursor对象的movetonext()方法,下面是displaytitle()方法的定义:public void displaytitle(cursor c)toast.maketext(this,id: + c.getstring(0) + n +isbn: + c.getstring(1) + n +title: + c.getstring(2) + n +publisher: + c.getstring(3

35、),toast.length_long).show();图4显示toast类,它从数据库中检索并显示一个标题。图4 toast类android创建和使用数据库详细指南(3)2009-03-06 10:11 开心果 it168 我要评论() 字号:t | t每个应用程序都要使用数据,android应用程序也不例外,android使用开源的、与操作系统无关的sql数据库-sqlite,本文介绍的就是如何为你的android应用程序创建和操作sqlite数据库。ad: 检索单个标题想要通过id检索单个标题,可以使用dbadapter类的gettitle()方法:overridepublic void

36、 oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate);setcontentview(r.layout.main);dbadapter db = new dbadapter(this);/-get a title-db.open();cursor c = db.gettitle(2);if (c.movetofirst()displaytitle(c);elsetoast.maketext(this, no title found,toast.length_long).show();db.close();返

37、回的结果是一个cursor对象,如果返回一行,可以使用displaytitle()方法显示标题的详细信息,否则就使用toast类显示一个错误消息。更新一个标题要更新一个特定的标题,可以调用dbadapter的updatetitle()方法,传递想要更新的标题的id给它就可以了,如清单6所示。清单6 调用dbadapter类的updatetitle()方法更新标题overridepublic void oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate);setcontentview(r.layout.mai

38、n);dbadapter db = new dbadapter(this);/-更新标题-db.open();if (db.updatetitle(1,0470285818,c# 2008 programmers reference,wrox press)toast.maketext(this, update successful.,toast.length_long).show();elsetoast.maketext(this, update failed.,toast.length_long).show();/-/-检索相同的标题-cursor c = db.gettitle(1);if

39、 (c.movetofirst()displaytitle(c);elsetoast.maketext(this, no title found,toast.length_long).show();/-db.close();如果更新成功会显示一条表示成功的消息,同时,你可以检索刚刚更新的标题看更新结果是否正确。删除一个标题想要删除一个标题,可以调用dbadapter类的deletetitle()方法,传递你想要删除的标题的id即可:overridepublic void oncreate(bundle savedinstancestate) super.oncreate(savedinstan

40、cestate);setcontentview(r.layout.main);dbadapter db = new dbadapter(this);/-delete a title-db.open();if (db.deletetitle(1)toast.maketext(this, delete successful.,toast.length_long).show();elsetoast.maketext(this, delete failed.,toast.length_long).show();db.close();如果删除成功会显示一条表示成功的消息。升级数据库要升级数据库,修改db

41、adapter类中database_version常量的值比之前的值大,如之前的值是1,将其改为2:public class dbadapterpublic static final string key_rowid = _id;public static final string key_isbn = isbn;public static final string key_title = title;public static final string key_publisher = publisher;private static final string tag = dbadapter;

42、private static final string database_name = books;private static final string database_table = titles;/-change this to a higher value-private static final int database_version = 2;private static final string database_create =create table titles (_id integer primary key autoincrement, + isbn text not

43、 null, title text not null, + publisher text not null);当你再次运行这个应用程序时,你会在eclipse的logcat窗口中看到数据库已经升级的消息,如图5所示。图5 logcat窗口-消息显示数据库升级成功简化数据库访问使用dbadapter类,可以简化你的android应用程序访问数据库记录的操作,一个重要的事情是在android中创建的sqlite数据库只有创建它的应用程序可以访问它。如果你要共享数据,你需要使用一个内容提供器,这个将在以后的文章中再介绍了。前几天,51cto为大家带来了在ubuntu下建立eclipse的android开发环境教程,这次为大家带来的是在myeclipse 8.6上搭建android开发环境的教程,希望大家喜欢。1,基本环境准备:安装jdk1.5以上,eclipse3.3以上版本.(myeclipse也可以),笔者安装了jdk1.6和myeclipse 8.6。jdk1.6myeclipse 8.6android创建和使用数据库详细指南(4)2,下载android sdk非常不幸的是,andr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论