android开发 数据库的使用
发布时间:2025-05-25 00:24:35 发布人:远客网络
一、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对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。
二、安卓开发连接数据库
Android采用关系型数据库SQLite3,它是一个支持SQL轻量级的嵌入式数据库,在嵌入式操作上有很广泛的,WM采用的也是SQLite3
关于过于、原理方面的东西在这篇文章里不会提到,但是如果你想能够快速的学会操作SQLite3,那这就是你要找的文章!
首先,我们看一下api,所有数据库相关的接口、类都在。database和android.database.sqlite两个包下,虽然只有两个包,但是如果你英文不好或是太懒的话也要迷茫一段时间,其实,我们真正用的到的没有几个!
1、SQLiteOpenHelper(android.database.sqlite.SQLiteOpenHelper)
这是一个抽象类,关于抽象类我们都知道,如果要使用它,一定是继承它!
这个类的方法很少,有一个构造方法
SQLiteOpenHelper(android.content.Context context, java.lang.String name,android.database.sqlite.SQLiteDatabase.CursorFactory factory, int version);
参数不做过多的解释,CursorFactory一般直接传null就可以
public void onCreate(SQLiteDatabase db)
此方法在创建数据库是被调用,所以,应该把创建表的操作放到这个方法里面,一会儿在后面我们会再详细的说如何创建表
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
从方法名上我们就能知道这个方法是执行更新的,没错,当version改变是系统会调用这个方法,所以在这个方法里应该执行删除现有表,然后手动调用onCreate的操作
SQLiteDatabase getReadableDatabase()
SQLiteDatabase getWritableDatabase()
2、SQLiteDatabase(android.database.sqlite.SQLiteDatabase)
关于操作数据库的工作(增、删、查、改)都在这个类里
执行SQL语句,用这个方法+SQL语句可以非常方便的执行增、删、查、改
除此之外,Android还提供了功过方法实现增、删、查、改
long insert(TABLE_NAME, null, contentValues)添加记录
int delete(TABLE_NAME, where, whereValue)删除记录
int update(TABLE_NAME, contentValues, where, whereValue)更新记录
Cursor query(TABLE_NAME, null, null, null, null, null, null)查询记录
除此之外,还有很多方法,如:beginTransaction()开始事务、endTransaction()结束事务…有兴趣的可以自己看api,这里就不多赘述了
3、Cursor(android.database.Cursor)
游标(接口),这个很熟悉了吧,Cursor里的方法非常多,常用的有:
boolean moveToPosition(position)将指针移动到某记录
getColumnIndex(Contacts.People.NAME)按列名获取id
boolean isAfterLast()指针是否在末尾
boolean isBeforeFirst()时候是开始位置
boolean isFirst()是否是第一条记录
boolean isLast()是否是最后一条记录
boolean moveToFirst()、 boolean moveToLast()、 boolean moveToNext()同moveToPosition(position)
4、SimpleCursorAdapter(android.widget.SimpleCursorAdapter)
也许你会奇怪了,之前我还说过关于数据库的操作都在database和database.sqlite包下,为什么把一个Adapter放到这里,如果你用过Android的SQLite3,你一定会知道
,这是因为我们对数据库的操作会经常跟列表联系起来
经常有朋友会在这出错,但其实也很简单
SimpleCursorAdapter adapter= new SimpleCursorAdapter(
new String[]{DB.TEXT1,DB. TEXT2},
new int[]{ R.id.list1,R.id.listText2});
参数4:显示的字段,传入String[]
参数5:显示字段使用的组件,传入int[],该数组中是TextView组件的id
到这里,关于数据库的操作就结束了,但是到目前为止我只做了翻译的工作,有些同学可能还是没有掌握,放心,下面我们一起顺着正常开发的思路理清一下头绪!
前面的只是帮没做过的朋友做下普及,下面才是你真正需要的!
一、写一个类继承SQLiteOpenHelpe
public class DatabaseHelper extends SQLiteOpenHelper
DatabaseHelper(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
public void onCreate(SQLiteDatabase db){
String sql=“CREATE TABLE tb_test(_id INTEGER DEFAULT'1' NOT NULL PRIMARY KEY AUTOINCREMENT,class_jb TEXT NOT NULL,class_ysbj TEXT NOT NULL,title TEXT NOT NULL,content_ysbj TEXT NOT NULL)”;
db.execSQL(sql);//需要异常捕获
在onUpgrade方法里删除现有表,然后手动调用onCtreate创建表
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
String sql=“drop table”+tbname;
对表增、删、查、改的方法,这里用的是SQLiteOpenHelper提供的方法,也可以用sql语句实现,都是一样的
关于获取可读/可写SQLiteDatabase,我不说大家也应该会想到,只有查找才会用到可读的SQLiteDatabase
public long insert(String tname, int tage, String ttel){
SQLiteDatabase db= getWritableDatabase();//获取可写SQLiteDatabase对象
//ContentValues类似map,存入的是键值对
ContentValues contentValues= new ContentValues();
contentValues.put(“tname”, tname);
contentValues.put(“tage”, tage);
contentValues.put(“ttel”, ttel);
return db.insert(tbname, null, contentValues);
public void delete(String _id){
SQLiteDatabase db= getWritableDatabase();
public void update(String _id,String tname, int tage, String ttel){
SQLiteDatabase db= getWritableDatabase();
ContentValues contentValues= new ContentValues();
contentValues.put(“tname”, tname);
contentValues.put(“tage”, tage);
contentValues.put(“ttel”, ttel);
db.update(tbname, contentValues,
SQLiteDatabase db= getReadableDatabase();
new String[]{“_id”,“tname”,“tage”,“ttel”,“taddr”},
null, null, null,“_id desc”);
关于db.query方法的参数,有很多,为了防止大家弄乱,我简单说一下
参数2:返回数据包含的列信息,String数组里放的都是列名
参数3:相当于sql里的where,sql里where后写的内容放到这就行了,例如:tage>?
参数4:如果你在参数3里写了?(知道我为什么写tage>?了吧),那个这里就是代替?的值接上例:new String[]{“30”}
参数5:分组,不解释了,不想分组就传null
参数6:having,想不起来的看看SQL
到这里,你已经完成了最多的第一步!我们来看看都用到了那些类:
SQLiteOpenHelper我们继承使用的
SQLiteDatabase增删查改都离不开它,即使你直接用sql语句,也要用到execSQL(sql)
二、这里无非是对DatabaseHelper类定义方法的调用,没什么可说的,不过我还是对查询再唠叨几句吧
Android查询出来的结果一Cursor形式返回
cursor= sqLiteHelper.select();//是不是很简单?
查询出来的cursor一般会显示在listView中,这就要用到刚才提到的SimpleCursorAdapter
SimpleCursorAdapter adapter= new SimpleCursorAdapter(
new String[]{“tname”,“ttel”},
new int[]{R.id.TextView01,R.id.TextView02}
里面带有实例。自己好好学习吧!
三、安卓开发服务器用什么数据库
1、视情况而定,oracle是主流的大型数据库,大多数电信项目都是使用的oracle,而sqlserver与mysql主要是个人以及小型公司使用的的数据库,但是sqlserver需要收费,mysql不用;如果按功能上来说,oracle最为强大,oracle支持递归查询,二后两者不支持。
2、三个数据库中,只有sqlserver有完整的图形化操作界面,而oracle与mysql都要借助于其他的第三方数据库图形操作界面,比如oracle用的大多都是plsql。