- 浏览: 66209 次
- 性别:
- 来自: Mercury
最新评论
一、SQLite介绍
SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。
二、SQLiteOpenHelper使用方法
JAVA中使用JDBC来访问数据库,而Android则设计使用一套自己的API来访问数据库,必须要是用到SQLiteOpenHelper方法来访问数据库,不使用也可以,但会很麻烦。SQLiteOpenHelper是一个管理数据库的创建、版本等操作的帮助类。可以创建一个子类去实现一些方法。
使用SQLiteOpenHelper来访问数据库必须要使用一些方法:
getReadableDatabase():创建或者打开一个可读的数据库,会返回一个SQLiteDatabase对象,基于这个对象可以进行增删改查操作。
getWritableDatabase():创建或者打开一个(可读)可写的数据库,同样也会返回一个SQLiteDatabase对象,基于这个对象可以进行增删改查操作。
onCreate(SQLiteDatabase db):回调函数,当数据库第一次被创建的时候就会调用。
onOpen(SQLiteDatabase db):回调函数,当数据库被打开的时候就会被调用。
onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion):回调函数,当数据库被更新的时候就会被调用。
close():关闭数据库。
三、使用adb访问SQLite
adb的全称为Android Debug Bridge,就是起到调试桥的作用。通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具。adb的工作方式比较特殊,采用监听Socket TCP 5554等端口的方式让IDE和Qemu通讯,默认情况下adb会daemon相关的网络端口,所以当我们运行Eclipse时adb进程就会自动运行。
adb是android sdk里的一个工具, 用这个工具可以直接操作管理android模拟器或者真实的andriod设备(如G1手机). 它的主要功能有:
1)运行设备的shell(命令行)
2) 管理模拟器或设备的端口映射
3) 计算机和设备之间上传/下载文件
4)将本地apk软件安装至模拟器或android设备
ADB是一个 客户端-服务器端 程序, 其中客户端是你用来操作的电脑, 服务器端是android设备.
打开命令行,输入adb,就会看到adb的相关命令。如果看到的是adb不是内部或外部命令这个提示,说明环境变量没有配置好,以前path只配置了sdk目录下的tools,对于旧版本中adb.exe就在该目录下,可以正常启动。但是对于新版本sdk,adb.exe被移动到了platform-tools目录下,这一点需要注意。
输入adb shell就进入Linux命令,以Linux命令来操作Android模拟器了,因为Android是以Linux内核开发的。
如果此时提示device not found:
则是因为模拟器没有启动,需要先启动模拟器,启动模拟器可以从Eclipse上的Opens Android SDK and AVD Manageer上选择需要启动的模拟器进行启动,也可以从命令行进行启动:
另:如果不知道自己的模拟器名称可以使用list AVD命令查看
SQLite数据库放在./data/data/当前虚拟机运行的应用程序的包名/databases/目录里。当没有创建数据库的时候,是没有databases目录的,只有当数据库创建成功时才有。(我的程序包名均为com.android.activity)
此时只有lib目录,没有databases目录。当运行创建程序之后,就会创建databases目录,且该目录下有数据库。
部分创建代码:
//创建一个DatabaseHelper对象 DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_sqlite_db"); //只有调用了DatabaseHelper对象的getReadableDatabase()方法,或者是getWritableDatabase()方法之后,才会创建,或打开一个数据库 SQLiteDatabase db = dbHelper.getReadableDatabase();
执行之后:
databases中的test_sqlite_db就是我们创建的数据库文件。要想使用这个文件必须使用sqlite的命令:
.schema用于查看当前有哪些表,以及建表语句。
在sqlite>下具体的操作和在其他数据库中基本一致,该不赘述。
四、SQLite增删改查
我们自己创建SQLite数据库的操作类DatabaseHelper需要继承SQLiteOpenHelper类。
DatabaseHelper.java
package com.android.db; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; public class DatabaseHelper extends SQLiteOpenHelper { //设置数据库默认版本为1 private static final int VERSION = 1; //在SQLiteOpenHelper的子类中,必须有该构造函数 //参数说明:一个Activity对象,表名,,当前数据库版本 public DatabaseHelper(Context context, String name, CursorFactory factory,int version) { super(context, name, factory, version); } public DatabaseHelper(Context context, String name) { this(context, name, VERSION); } public DatabaseHelper(Context context, String name,int version) { super(context, name, null, version); } //该方法第一次创建数据库的时候执行,实际上是第一次得到SQLIteDatabase对象的时候执行的 @Override public void onCreate(SQLiteDatabase db) { System.out.println("create a database"); db.execSQL("create table user(id int,name varchar(20))"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //此处可以用于添加更新操作 System.out.println("upgreate a database"); } }
DatabaseHelper作为一个访问SQLite的帮助类,提供了两个方面的功能:
在SQLiteOpenHelper的子类中,必须有构造函数
DatabaseHelper(Context context, String name, CursorFactory factory,int version)
可以重载多个构造方法。
main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <Button android:id="@+id/createDatabase" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="createDatabase" /> <Button android:id="@+id/updateDatabase" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="updateDatabase" /> <Button android:id="@+id/insert" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="insert"/> <Button android:id="@+id/update" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="update"/> <Button android:id="@+id/query" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="query"/> </LinearLayout>
SQLiteActivity.java
package com.android.activity; import android.app.Activity; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import com.android.db.DatabaseHelper; public class SQLiteActivity extends Activity { private Button createButton; private Button insertButton; private Button updateButton; private Button updateRecordButton; private Button queryButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //得到对象 createButton = (Button)findViewById(R.id.createDatabase); updateButton = (Button)findViewById(R.id.updateDatabase); insertButton = (Button)findViewById(R.id.insert); updateRecordButton = (Button)findViewById(R.id.update); queryButton = (Button)findViewById(R.id.query); //添加监听器 createButton.setOnClickListener(new CreateListener()); updateButton.setOnClickListener(new UpdateListener()); insertButton.setOnClickListener(new InsertListener()); updateRecordButton.setOnClickListener(new UpdateRecordListener()); queryButton.setOnClickListener(new QueryListener()); } class CreateListener implements OnClickListener{ public void onClick(View v) { //创建一个DatabaseHelper对象 DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_sqlite_db"); //只有调用了DatabaseHelper对象的getReadableDatabase()方法,或者是getWritableDatabase()方法之后,才会创建,或打开一个数据库 SQLiteDatabase db = dbHelper.getReadableDatabase(); } } class UpdateListener implements OnClickListener{ public void onClick(View v) { //更新“数据库”,调用了第三个构造方法,由于默认版本为1,此处设置为2,则android会自动调用onUpgrade方法。 DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_sqlite_db",2); SQLiteDatabase db = dbHelper.getReadableDatabase(); } } class InsertListener implements OnClickListener{ public void onClick(View v) { //生成ContentValues对象,和map对象差不多,存放的都是键值对 ContentValues values = new ContentValues(); //想在该对象当中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致 values.put("id", 1); values.put("name","bauble"); DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_sqlite_db",2); SQLiteDatabase db = dbHelper.getWritableDatabase(); //调用insert方法,就可以将数据插入到数据库当中,三个参数:表名、默认空值,ContentValues对象 db.insert("user", null, values); } } //更新数据操作就相当于执行SQL语句当中的update语句 class UpdateRecordListener implements OnClickListener{ public void onClick(View v) { //得到一个可写的SQLiteDatabase对象 DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_sqlite_db"); SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name", "allorry"); //第一个参数是要更新的表名 //第二个参数是一个ContentValeus对象 //第三个参数是where子句 db.update("user", values, "id=?", new String[]{"1"}); } } class QueryListener implements OnClickListener{ public void onClick(View v) { DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_sqlite_db"); SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor = db.query("user", new String[]{"id","name"}, "id=?", new String[]{"1"}, null, null, null); while(cursor.moveToNext()){ String name = cursor.getString(cursor.getColumnIndex("name")); System.out.println("query--->" + name); } } } }
例子解释:
1) 在CreateListener这个监听器中是用来创建数据库的,创建数据库必须要先创建一个DatabaseHelper对象,同时调用的是DatabaseHelper两个参数的构造方法,分别为当前Activity的对象,以及要创建的数据库的名字。并且只有调用了DatabaseHelper对象的getReadableDatabase()方法,或者是getWritableDatabase()方法之后,才会创建,或打开一个数据库。
2) UpdateListener是用来更新数据库的,不是更新数据的。由于默认数据库版本为1,此处设置为2,则android会自动调用onUpgrade方法。
3) 插入数据必须使用ContentValues对象进行数据的存储、传递。contentValue对象和Map差不多,存放的都是键值对。想在该对象当中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致。由于插入数据,相对于修改,所以版本号为2。最后调用insert方法就可以将数据插入到数据库当中,三个参数:表名、如果ContentValues对象为空时的默认值,ContentValues对象。
4) 更新数据操作需要使用ContentValues对象存储需要更新的列名以及更新后的值。最后调用DatabaseHelper的update方法,参数分别为表名、contentValues对象,where子句,此时相当于JDBC的PrepareStatement的方法使用?作为占位符,在后面的String数组中设置占位符的值。
5) 数据查询是调用query方法,该方法参数众多,一般的参数为:表名、存储要查询列的String型数组、where子句、占位符数组、groupby、having、orderby。返回值为Cursor类型,循环调用cursor的moveToNext方法即可。
运行界面:
发表评论
文章已被作者锁定,不允许评论。
-
Android40_Dialog
2011-11-14 00:11 2949Dialog是Android常用的对话框控件。AlertDia ... -
Android39_Clock和TimePicker
2011-11-14 00:08 2320一、AnalogClock和DigitalClock ... -
Android38_ImageView和Gallery
2011-11-14 00:07 3566一、ImageView使用方法 ImageVi ... -
Android37_JSON数据解析
2011-11-08 00:14 2307一、JSON介绍 JSON(JavaSc ... -
Android36_Animations使用(四)
2011-11-08 00:14 3382一、LayoutAnimationsContrlller ... -
Android35_Animations使用(三)
2011-11-08 00:13 2614一、AnimationSet的具体使用方法 ... -
Android34_Animations使用(二)
2011-11-08 00:12 1923在代码中使用Animations可以很方便的调试、运行 ... -
Android33_Animations使用(一)
2011-11-08 00:12 2248一、Animations介绍 Anima ... -
Android31_AppWidget使用(二)
2011-11-05 00:09 2470一、PendingIntent介绍 PendingIn ... -
Android30_AppWidget使用(一)
2011-11-05 00:08 2231一、App Widget定义 App ... -
Android32_Notification用法
2011-11-05 00:09 1847Android系统的状态栏(Status Bar)中有一 ... -
Android29_SeekBar和RatingBar
2011-11-02 23:21 2077一、使用SeekBar步骤: SeekB ... -
Android28_ExpandableListActivity
2011-11-02 23:21 1462ExpandableListActivity就是可扩展的 ... -
Android27_AutoCompleteTextView
2011-11-02 23:21 1035一、创建AutoCompleteTextView ... -
Android26_DatePicker
2011-11-02 23:20 1750一、DatePicker和DatePickerDialo ... -
Android25_Spinner使用方法
2011-11-02 23:20 2778一、创建Spinner的步骤 1.在布局 ... -
Android24_Service初步
2011-10-18 22:27 969一、Service概念 ... -
Android23_Socket编程
2011-10-18 22:19 1472一、什么是Socket Socket是基 ... -
Android22_WIFI网络操作
2011-10-18 22:12 1657一、什么是WIFI WIFI就是一种无线 ... -
Android21_广播机制(二)
2011-10-18 22:00 965一、注册BroadcastReceiver的方法 ...
相关推荐
自己编写 能够完美实现 mars老师 android 01_16_SQLite使用方法 源码
android sqlite数据库操作,实现数据库的创建,查找,删除更新操作
android sqlite存储使用数据库实例,希望对大家有帮助
Android_SQLite数据库使用范例
android应用工程通过对sqlite数据库进行增删查改
Android入门程序_SQLite的使用
android SQLite数据库使用实例,用SQLiteOpenHolper实现
这是一个android数据库框架
android 6.0 可用 sqlite3 和so文件 adb push D:\temp\android_arm_sqlite3\libsqlite_jni.so /system/lib/ adb push D:\temp\android_arm_sqlite3\libsqlite.so /system/lib/ adb push D:\temp\android_arm_sqlite...
SQLite是一种轻量级的小型数据库,虽然比较小,但是功能相对...Android系统中也不例外,也是采用SQLite,本节中就学习下在andorid中怎样使用该数据库来存放数据,并且对SQLite完成简单的新建,更新,查询,删除等操作。
android_sqlite3实例.docx
android sqlite基本功能实现
新手学习安卓开发sqlite数据库可以看一下,简单的登录注册
总结了本地数据存储的前两种:文件和配置项。还剩下最后一种数据库存储
这是手写数据库框架的一部分
Android中使用SQLite示例,详情可以参见博客:http://www.cnblogs.com/plokmju/p/android_SQLite.html
是关于android 2.3的SQLite源代码,工程师可以参考下
android下SQLite的基本操作,包括数据库的创建,数据的增删改查等等
详细的SQLite连接方法和命令。通过命令行来建立连接操作数据库。也可以使用界面管理
android sqlite的使用方法