您的位置:首页 > 移动开发 > Android开发

Android开发教程之 SQLite数据库的使用

2013-05-16 10:47 267 查看
在开发Android应用程序时经常需要存储数据,Android系统提供了SQLite数据库,还提供了SQLiteOpenHelper类,使我们可以很方便的操作数据库。通过一个例子来说明在Android开发中使用SQLite数据库。
示例:新建一个Android应用程序项目,在main.xml文件中添加5个按钮。当我们点击这五个按钮时依次进行创建数据库,更新数据库的版本,向数据库的表中插入数据,更新表以及查询等操作。这个项目中有两个Java文件,一个是Activity的文件,另一个是继承自SQLiteOpenHelper类的DatebaseHelper类。在这个类中重写了SQLiteOpenHelper的构造方法,以及onCreate()和onUpgrade()方法。
main.xml

[xhtml:firstline[1]] view plaincopy
<?xml version="1.0" encoding="utf-8"?> <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/createdb" android:layout_width="300dp" android:layout_height="wrap_content" android:text="创建数据库" /> <Button android:id="@+id/updatedb" android:layout_width="300dp" android:layout_height="wrap_content" android:text="更新数据库" /> <Button android:id="@+id/insert" android:layout_width="300dp" android:layout_height="wrap_content" android:text="插入数据" /> <Button android:id="@+id/update" android:layout_width="300dp" android:layout_height="wrap_content" android:text="更新数据" /> <Button android:id="@+id/query" android:layout_width="300dp" android:layout_height="wrap_content" android:text="查询数据" /> </LinearLayout>

DatebaseHelper.java

[java:firstline[1]] view plaincopy
package idea.org;
import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper;
public class DatebaseHelper extends SQLiteOpenHelper{
//DatabaseHelper作为一个访问SQLite的助手类,提供两个方面的功能, //第一,getReadableDatabase(),getWritableDatabase()可以获得SQLiteDatabse对象,通过该对象可以对数据库进行操作 //第二,提供了onCreate()和onUpgrade()两个回调函数,允许我们在创建和升级数据库时,进行自己的操作 public static final int Version=1; //在SQLiteOepnHelper的子类当中,必须有该构造函数 public DatebaseHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); // TODO Auto-generated constructor stub } public DatebaseHelper(Context context,String name,int version) { this(context,name,null,version); } public DatebaseHelper(Context context,String name) { this(context, name, Version); } //该函数是在第一次得到SQLiteDatabse对象的时候,才会调用这个方法 @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub System.out.println("create a datebase"); //execSQL函数用于执行SQL语句 db.execSQL("create table user(id int primary key,name varchar(20))"); } //更新数据库的版本时执行这个方法 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub System.out.println("update a database"); }
}
Android_SQLite.java

[java:firstline[1]] view plaincopy
package idea.org;
import android.app.Activity; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button;
public class Android_SQLite extends Activity { private Button createdb,updatedb,buttonInsert,buttonUpdate,buttonQuery; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); createdb=(Button)findViewById(R.id.createdb); updatedb=(Button)findViewById(R.id.updatedb); buttonInsert=(Button)findViewById(R.id.insert); buttonUpdate=(Button)findViewById(R.id.update); buttonQuery=(Button)findViewById(R.id.query); createdb.setOnClickListener(new CreatedbListener()); updatedb.setOnClickListener(new UpdateListener()); buttonInsert.setOnClickListener(new ButtonInsertListener()); buttonUpdate.setOnClickListener(new ButtonUpdateListener()); buttonQuery.setOnClickListener(new ButtonQueryListener()); } class CreatedbListener implements OnClickListener {
/* (non-Javadoc) * @see android.view.View.OnClickListener#onClick(android.view.View) */ @Override public void onClick(View v) { // TODO Auto-generated method stub //只有调用了DatabaseHelper对象的getReadableDatabase()方法,或者是getWritableDatabase()方法之后,才会创建,或打开一个数据库 DatebaseHelper dbHelper=new DatebaseHelper(Android_SQLite.this, "test_db"); SQLiteDatabase db=dbHelper.getReadableDatabase(); }
} class UpdateListener implements OnClickListener {
/* (non-Javadoc) * @see android.view.View.OnClickListener#onClick(android.view.View) */ @Override public void onClick(View v) { // TODO Auto-generated method stub //将数据库的版本升级为2 DatebaseHelper dbHelper=new DatebaseHelper(Android_SQLite.this,"test_db",2); SQLiteDatabase db=dbHelper.getReadableDatabase(); }
} class ButtonInsertListener implements OnClickListener {
/* (non-Javadoc) * @see android.view.View.OnClickListener#onClick(android.view.View) */ @Override public void onClick(View v) { // TODO Auto-generated method stub //获取最新版本的数据库,不然会出现异常 DatebaseHelper dbHelper=new DatebaseHelper(Android_SQLite.this,"test_db",2); SQLiteDatabase db=dbHelper.getWritableDatabase(); //db.execSQL("insert into user (id,name) values (1,'张三')") ContentValues values=new ContentValues(); values.put("id", 1); values.put("name", "张三"); db.insert("user", null, values); }
} class ButtonUpdateListener implements OnClickListener {
/* (non-Javadoc) * @see android.view.View.OnClickListener#onClick(android.view.View) */ @Override public void onClick(View v) { // TODO Auto-generated method stub DatebaseHelper dbHelper=new DatebaseHelper(Android_SQLite.this,"test_db",2); //得到一个可写的SQLiteDatabase对象 SQLiteDatabase db=dbHelper.getWritableDatabase(); ContentValues values=new ContentValues(); values.put("name", "张三丰"); db.update("user", values, "id=?", new String[]{"1"}); }
} class ButtonQueryListener implements OnClickListener {
/* (non-Javadoc) * @see android.view.View.OnClickListener#onClick(android.view.View) */ @Override public void onClick(View v) { // TODO Auto-generated method stub DatebaseHelper dbHelper=new DatebaseHelper(Android_SQLite.this,"test_db",2); SQLiteDatabase db=dbHelper.getReadableDatabase(); Cursor c=db.rawQuery("select * from user",null); while(c.moveToNext()) { int id=c.getInt(c.getColumnIndex("id")); String name=c.getString(c.getColumnIndexOrThrow("name")); System.out.println("Query--->id:"+id+" name:"+name); } }
} }
需要注意的是当我们点击“更新数据库”的按钮之后,数据库的版本更新为2。当我们再使用数据库的使用应该获得最新版本的数据库,不然的话会出现Adroid.database.sqlite.SQLiteException: Can't downgrade database from version 2 to 1的异常。
运行效果:
界面

依次点击5个按钮控制台输出如下内容。

本文出处:http://www.ablanxue.com/prone_3667_1.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android SQLite 数据库