Android创建和使用数据库详细指南
数据库支持每个应用程序无论大小的生命线,除非你的应用程序只处理简单的数据,那么就需要一个数据库系统存储你的结构化数据,Android使用SQLite数据库,它是一个开源的、支持多操作系统的SQL数据库,在许多领域广泛使用,如Mozilla FireFox就是使用SQLite来存储配置数据的,iPhone也是使用SQLite来存储数据的。
在Android中,你为某个应用程序创建的数据库,只有它可以访问,其它应用程序是不能访问的,数据库位于Android设备/data/data//databases文件夹中,在这篇文章中,你将会学习到如何在Android中创建和使用数据库。
SQLite数据库
使用Eclipse创建一个Android项目,取名为Database,如图1所示:
图1 数据库-使用Eclipse创建你的Android新项目
创建DBAdapter辅助类
操作数据库的最佳实践是创建一个辅助类,由它封装所有对数据库的复杂访问,对于调用代码而言它是透明的,因此我创建了一个DBAdapter的辅助类,由它创建、打开、关闭和使用SQLite数据库。
首先,在src/文件夹(在这个例子中是src/net.learn2develop.Database)下添加一个DBAdapter.java文件。
在DBAdapter.java文件中,导入所有你要使用到的命名空间:
package net.learn2develop.Databases; import android.content.ContentValues; import android.content.Context; import android.<span style="color: #0000ff">database</span><span style="color: #000000">.</span><span style="color: #0000ff">Cursor</span><span style="color: #000000">;<br><br>import android.</span><span style="color: #0000ff">database</span><span style="color: #000000">.SQLException;<br><br>import android.</span><span style="color: #0000ff">database</span><span style="color: #000000">.sqlite.SQLiteDatabase;<br><br>import android.</span><span style="color: #0000ff">database</span><span style="color: #000000">.sqlite.SQLiteOpenHelper;<br><br>import android.util.</span><span style="color: #ff00ff">Log</span><span style="color: #000000">;<br><br></span><span style="color: #0000ff">public</span><span style="color: #000000"> class DBAdapter<br><br>{<br><br>}</span> |
接下来创建一个数据库,取名为bookstitles,字段如图2所示。
图2 数据库字段
在DBAdapter.java文件中,定义清单1中的常量。
清单1 定义DBAdapter.java文件中的常量
DATABASE_CREATE常量包括创建titles表的SQL语句。
在DBAdapter类中,你可以扩展SQLiteOpenHelper类,它是一个Android辅助类,主要用于数据库创建和版本管理。实际上,你可以覆盖onCreate()和onUpgrade()方法,如清单2所示。
清单2 在DBAdapter类中,扩展SQLiteOpenHelper类覆盖onCreate() 和 onUpgrade()方法
onCreate()方法创建一个新的数据库,onUpgrade()方法用于升级数据库,这可以通过检查DATABASE_VERSION常量定义的值来实现,对于onUpgrade()方法而言,只不过是简单地删除表,然后在创建表而已。
现在你可以定义不同的方法来打开和关闭数据库,如清单3中的添加/编辑/删除/行的函数。
清单3 定义打开和关闭数据库以及增加/编辑/删除表中行的方法
注意Android使用Cursor类返回一个需要的值,Cursor作为一个指针从数据库查询返回结果集,使用Cursor允许Android更有效地管理它们需要的行和列,你使用ContentValues对象存储键/值对,它的put()方法允许你插入不同数据类型的键值。
清单4显示了完整的DBAdapter.java源代码。
清单4 DBAdapter.java完整源代码
使用数据库
现在你已经可以利用创建的辅助类来使用数据库了,在DatabaseActivity.java文件中,创建一个DBAdapter类的实例:
package net.learn2develop.<span style="color: #0000ff">Database</span><span style="color: #000000">;<br><br>import android.app.Activity;<br><br>import android.os.Bundle;<br><br></span><span style="color: #0000ff">public</span><span style="color: #000000"> class DatabaseActivity extends Activity {<br><br></span><span style="color: #008080">/*</span><span style="color: #008080">* Called when the activity is first created. </span><span style="color: #008080">*/</span><span style="color: #000000"><br><br></span><span style="color: #008000">@Override</span><span style="color: #000000"><br><br></span><span style="color: #0000ff">public</span><span style="color: #000000"> void onCreate(Bundle savedInstanceState) {<br><br>super.onCreate(savedInstanceState);<br><br>setContentView(R.layout.main);<br><br>DBAdapter db </span><span style="color: #808080">=</span><span style="color: #000000"> new DBAdapter(this);<br><br>}<br><br>}</span> |
增加一个标题
如果想在titles表中增加一个标题,可以使用DBAdapter类的insertTitle()方法:
insertTitle()方法返回插入行的ID,如果在添加过程中遇到错误,它就返回-1。
如果你分析Android设备/模拟器的文件系统,你可以看到book数据库创建在database文件夹下,如图3所示。
图3 database文件夹
检索所有标题
想要检索titles表中的所有标题,可以使用DBAdapter类的getAllTitles()方法,如清单5所示。
清单5 使用DBAdapter类的getAllTitles()方法检索titles表中的所有标题
返回的结果是一个Cursor对象,如果要显示所有标题,你首先应该调用Cursor对象的moveToFirst()方法,如果它成功(意味着至少有一行有效),使用DisplayTitle()方法显示详细的标题,要移动到下一个标题,可以调用Cursor对象的moveToNext()方法,下面是DisplayTitle()方法的定义:
public<span style="color: #000000"> void DisplayTitle(</span><span style="color: #0000ff">Cursor</span><span style="color: #000000"> c)<br><br>{<br><br>Toast.makeText(this,<br><br>"id: " </span><span style="color: #808080">+</span><span style="color: #000000"> c.getString(</span><span style="color: #000000">) </span><span style="color: #808080">+</span><span style="color: #000000"> "\n" </span><span style="color: #808080">+</span><span style="color: #000000"><br><br>"ISBN: " </span><span style="color: #808080">+</span><span style="color: #000000"> c.getString(</span><span style="color: #000000">) </span><span style="color: #808080">+</span><span style="color: #000000"> "\n" </span><span style="color: #808080">+</span><span style="color: #000000"><br><br>"TITLE: " </span><span style="color: #808080">+</span><span style="color: #000000"> c.getString(</span><span style="color: #000000">) </span><span style="color: #808080">+</span><span style="color: #000000"> "\n" </span><span style="color: #808080">+</span><span style="color: #000000"><br><br>"PUBLISHER: " </span><span style="color: #808080">+</span><span style="color: #000000"> c.getString(</span><span style="color: #000000">),<br><br>Toast.LENGTH_LONG).show();<br><br>}</span> |
图4显示Toast类,它从数据库中检索并显示一个标题。
图4 Toast类
检索单个标题
想要通过ID检索单个标题,可以使用DBAdapter类的getTitle()方法:
@Override<span style="color: #000000"><br><br></span><span style="color: #0000ff">public</span><span style="color: #000000"> void onCreate(Bundle savedInstanceState) {<br><br>super.onCreate(savedInstanceState);<br><br>setContentView(R.layout.main);<br><br>DBAdapter db </span><span style="color: #808080">=</span><span style="color: #000000"> new DBAdapter(this);<br><br></span><span style="color: #808080">//</span><span style="color: #008080">--</span><span style="color: #008080">-get a title---</span><span style="color: #008080"><br></span><span style="color: #000000"><br>db.</span><span style="color: #0000ff">open</span><span style="color: #000000">();<br><br></span><span style="color: #0000ff">Cursor</span><span style="color: #000000"> c </span><span style="color: #808080">=</span><span style="color: #000000"> db.getTitle(</span><span style="color: #000000">);<br><br></span><span style="color: #0000ff">if</span><span style="color: #000000"> (c.moveToFirst())<br><br>DisplayTitle(c);<br><br></span><span style="color: #0000ff">else</span><span style="color: #000000"><br><br>Toast.makeText(this, "No title found",<br><br>Toast.LENGTH_LONG).show();<br><br>db.</span><span style="color: #0000ff">close</span><span style="color: #000000">();<br><br>}</span> |
返回的结果是一个Cursor对象,如果返回一行,可以使用DisplayTitle()方法显示标题的详细信息,否则就使用Toast类显示一个错误消息。
更新一个标题
要更新一个特定的标题,可以调用DBAdapter的updateTitle()方法,传递想要更新的标题的ID给它就可以了,如清单6所示。
清单6 调用DBAdapter类的updateTitle()方法更新标题
如果更新成功会显示一条表示成功的消息,同时,你可以检索刚刚更新的标题看更新结果是否正确。
删除一个标题
想要删除一个标题,可以调用DBAdapter类的deleteTitle()方法,传递你想要删除的标题的ID即可:
如果删除成功会显示一条表示成功的消息。
升级数据库
要升级数据库,修改DBAdapter类中DATABASE_VERSION常量的值比之前的值大,如之前的值是1,将其改为2:
当你再次运行这个应用程序时,你会在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.6
MyEclipse 8.6
2,下载Android SDK
非常不幸的是,Android.com 被我们强大的GFW 给墙了,但是我们又不得不去官网下载(当然,你能从朋友手中拿到SDK也很不错哦),让我们不得不翻墙。当然翻墙的方法很多,我这里也不能说了,如果你实在没有找到方法,可以加QQ 276294057 和我交流。
地址:http://developer.android.com/sdk/index.html
下载成功后:
Android SDK文件
解压到某目录下:
解压文件
解压目录
双击SDK Setup.exe 安装SDK,安装完成后,文件夹入下图所示:
安装SDK
3,配置SDK环境变量:
主要是在path 中加入SDK 下的tools目录:
在path 中加入SDK 下的tools目录
环境变量:
环境变量
完成以后SDK就算配置完成。
4,给MyEclipse安装ADT插件
打开eclipse的help菜单->MyEclipse Configuration Center
打开eclipse的help菜单
进入后点击 Software 标签
Software 标签
在Browser Software后面的 add site
Browser Software
在对话框中填写如图所示:(name 自己取)
在对话框中填写名称后点击ok
然后在左边会出现 如下的
点击Add to Profile
选中目标,右键点击Add to Profile,于是在右边的Software Updates Available 就会有所反应,
Software Updates Available
然后点击下面的Apply 2 changes 来开始安装
点击下面的Apply 2 changes
开始安装
点击接受下面的许可,继续。
点击接受
接着点击Update开始安装。这个过程可能有点慢,耐心等待他的完成。
Update开始安装
5,配置MyEclipse
点击window –>preferences
点击window –>preferences
在Android选项,填写好SDK location,点击Apply后出现以下内容。
点击Apply后出现的内容
6,AVD的管理
点击window-> Android SDK and AVD Manager
Android SDK and AVD Manager
然后选择 Available Package
因为需要兼容性测试,如果条件允许,最好 多装些版本。
然后,点击Install Selected 开始安装。这又是一个漫长的过程,可能非常漫长。呵呵
安装好了后。我们开始建立一个虚拟机
点击new
创建
创建成功后,可以启动试试
启动,点击Start
开始启动模拟器
点击Start ,然后点击launch,开始启动模拟器。
7,创建Hello World程序
创建一个Android 项目
点击next
点击finish
右键点击项目->Run As –> Android Application
点击右键
即可看到效果: