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

在开发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)