SQLite数据库的使用
在开发Android应用程序时经常需要存储数据,Android系统提供了SQLite数据库,还提供了SQLiteOpenHelper类,使我们可以很方便的操作数据库。通过一个例子来说明在Android开发中使用SQLite数据库。
示例:新建一个Android应用程序项目,在main.xml文件中添加5个按钮。当我们点击这五个按钮时依次进行创建数据库,更新数据库的版本,向数据库的表中插入数据,更新表以及查询等操作。这个项目中有两个Java文件,一个是Activity的文件,另一个是继承自SQLiteOpenHelper类的DatebaseHelper类。在这个类中重写了SQLiteOpenHelper的构造方法,以及onCreate()和onUpgrade()方法。
main.xml
- <?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
- 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
- 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个按钮控制台输出如下内容。
路漫漫其修远兮 吾将上下而求索