• 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
     
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:orientation="vertical"  
    4.     android:layout_width="fill_parent"  
    5.     android:layout_height="fill_parent"  
    6.     >  
    7. <TextView    
    8.     android:layout_width="fill_parent"   
    9.     android:layout_height="wrap_content"   
    10.     android:text="@string/hello"  
    11.     />  
    12. <Button  
    13.     android:id="@+id/createdb"  
    14.     android:layout_width="300dp"  
    15.     android:layout_height="wrap_content"  
    16.     android:text="创建数据库"  
    17.     />  
    18. <Button  
    19.     android:id="@+id/updatedb"  
    20.     android:layout_width="300dp"  
    21.     android:layout_height="wrap_content"  
    22.     android:text="更新数据库"  
    23.     />  
    24. <Button  
    25.     android:id="@+id/insert"  
    26.     android:layout_width="300dp"  
    27.     android:layout_height="wrap_content"  
    28.     android:text="插入数据"  
    29.     />  
    30. <Button  
    31.     android:id="@+id/update"  
    32.     android:layout_width="300dp"  
    33.     android:layout_height="wrap_content"  
    34.     android:text="更新数据"  
    35.     />  
    36. <Button  
    37.     android:id="@+id/query"  
    38.     android:layout_width="300dp"  
    39.     android:layout_height="wrap_content"  
    40.     android:text="查询数据"  
    41.     />  
    42. </LinearLayout>  
        

    DatebaseHelper.java

           

    [java:firstline[1]] view plaincopy
     
    1. package idea.org;  
    2.   
    3. import android.content.Context;  
    4. import android.database.sqlite.SQLiteDatabase;  
    5. import android.database.sqlite.SQLiteDatabase.CursorFactory;  
    6. import android.database.sqlite.SQLiteOpenHelper;  
    7.   
    8. public class DatebaseHelper extends SQLiteOpenHelper{  
    9.       
    10.     //DatabaseHelper作为一个访问SQLite的助手类,提供两个方面的功能,  
    11.     //第一,getReadableDatabase(),getWritableDatabase()可以获得SQLiteDatabse对象,通过该对象可以对数据库进行操作  
    12.     //第二,提供了onCreate()和onUpgrade()两个回调函数,允许我们在创建和升级数据库时,进行自己的操作  
    13.     public static final int Version=1;  
    14.     //在SQLiteOepnHelper的子类当中,必须有该构造函数  
    15.     public DatebaseHelper(Context context, String name, CursorFactory factory,  
    16.             int version) {        
    17.         super(context, name, factory, version);  
    18.         // TODO Auto-generated constructor stub  
    19.     }  
    20.     public DatebaseHelper(Context context,String name,int version)  
    21.     {  
    22.         this(context,name,null,version);  
    23.     }  
    24.     public DatebaseHelper(Context context,String name)  
    25.     {  
    26.         this(context, name, Version);  
    27.     }  
    28.     //该函数是在第一次得到SQLiteDatabse对象的时候,才会调用这个方法  
    29.     @Override  
    30.     public void onCreate(SQLiteDatabase db) {  
    31.         // TODO Auto-generated method stub  
    32.         System.out.println("create a datebase");  
    33.         //execSQL函数用于执行SQL语句  
    34.         db.execSQL("create table user(id int primary key,name varchar(20))");  
    35.     }  
    36.     //更新数据库的版本时执行这个方法  
    37.     @Override  
    38.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
    39.         // TODO Auto-generated method stub  
    40.         System.out.println("update a database");  
    41.     }  
    42.   
    43. }  

    Android_SQLite.java

          

    [java:firstline[1]] view plaincopy
     
    1. package idea.org;  
    2.   
    3. import android.app.Activity;  
    4. import android.content.ContentValues;  
    5. import android.database.Cursor;  
    6. import android.database.sqlite.SQLiteDatabase;  
    7. import android.os.Bundle;  
    8. import android.view.View;  
    9. import android.view.View.OnClickListener;  
    10. import android.widget.Button;  
    11.   
    12. public class Android_SQLite extends Activity {  
    13.     private Button createdb,updatedb,buttonInsert,buttonUpdate,buttonQuery;  
    14.     /** Called when the activity is first created. */  
    15.     @Override  
    16.     public void onCreate(Bundle savedInstanceState) {  
    17.         super.onCreate(savedInstanceState);  
    18.         setContentView(R.layout.main);  
    19.         createdb=(Button)findViewById(R.id.createdb);  
    20.         updatedb=(Button)findViewById(R.id.updatedb);  
    21.         buttonInsert=(Button)findViewById(R.id.insert);  
    22.         buttonUpdate=(Button)findViewById(R.id.update);  
    23.         buttonQuery=(Button)findViewById(R.id.query);  
    24.         createdb.setOnClickListener(new CreatedbListener());         
    25.         updatedb.setOnClickListener(new UpdateListener());    
    26.         buttonInsert.setOnClickListener(new ButtonInsertListener());    
    27.         buttonUpdate.setOnClickListener(new ButtonUpdateListener());    
    28.         buttonQuery.setOnClickListener(new ButtonQueryListener());    
    29.     }  
    30.     class CreatedbListener implements OnClickListener  
    31.     {  
    32.   
    33.         /* (non-Javadoc) 
    34.          * @see android.view.View.OnClickListener#onClick(android.view.View) 
    35.          */  
    36.         @Override  
    37.         public void onClick(View v) {  
    38.             // TODO Auto-generated method stub    
    39.             //只有调用了DatabaseHelper对象的getReadableDatabase()方法,或者是getWritableDatabase()方法之后,才会创建,或打开一个数据库   
    40.             DatebaseHelper dbHelper=new DatebaseHelper(Android_SQLite.this"test_db");  
    41.             SQLiteDatabase db=dbHelper.getReadableDatabase();  
    42.         }  
    43.           
    44.     }  
    45.     class UpdateListener implements OnClickListener  
    46.     {  
    47.   
    48.         /* (non-Javadoc) 
    49.          * @see android.view.View.OnClickListener#onClick(android.view.View) 
    50.          */  
    51.         @Override  
    52.         public void onClick(View v) {  
    53.             // TODO Auto-generated method stub    
    54.             //将数据库的版本升级为2  
    55.             DatebaseHelper dbHelper=new DatebaseHelper(Android_SQLite.this,"test_db",2);  
    56.             SQLiteDatabase db=dbHelper.getReadableDatabase();  
    57.         }  
    58.           
    59.     }  
    60.     class ButtonInsertListener implements OnClickListener  
    61.     {  
    62.   
    63.         /* (non-Javadoc) 
    64.          * @see android.view.View.OnClickListener#onClick(android.view.View) 
    65.          */  
    66.         @Override  
    67.         public void onClick(View v) {  
    68.             // TODO Auto-generated method stub             
    69.            //获取最新版本的数据库,不然会出现异常  
    70.            DatebaseHelper dbHelper=new DatebaseHelper(Android_SQLite.this,"test_db",2);  
    71.            SQLiteDatabase db=dbHelper.getWritableDatabase();  
    72.            //db.execSQL("insert into user (id,name) values (1,'张三')")  
    73.            ContentValues  values=new ContentValues();  
    74.            values.put("id"1);  
    75.            values.put("name""张三");  
    76.            db.insert("user"null, values);  
    77.         }  
    78.           
    79.     }  
    80.     class ButtonUpdateListener implements OnClickListener  
    81.     {  
    82.   
    83.         /* (non-Javadoc) 
    84.          * @see android.view.View.OnClickListener#onClick(android.view.View) 
    85.          */  
    86.         @Override  
    87.         public void onClick(View v) {  
    88.             // TODO Auto-generated method stub            
    89.            DatebaseHelper dbHelper=new DatebaseHelper(Android_SQLite.this,"test_db",2);  
    90.          //得到一个可写的SQLiteDatabase对象  
    91.            SQLiteDatabase db=dbHelper.getWritableDatabase();  
    92.            ContentValues values=new ContentValues();  
    93.            values.put("name""张三丰");  
    94.            db.update("user", values, "id=?"new String[]{"1"});  
    95.         }  
    96.           
    97.     }  
    98.     class ButtonQueryListener implements OnClickListener  
    99.     {  
    100.   
    101.         /* (non-Javadoc) 
    102.          * @see android.view.View.OnClickListener#onClick(android.view.View) 
    103.          */  
    104.         @Override  
    105.         public void onClick(View v) {  
    106.             // TODO Auto-generated method stub        
    107.             DatebaseHelper dbHelper=new DatebaseHelper(Android_SQLite.this,"test_db",2);  
    108.             SQLiteDatabase db=dbHelper.getReadableDatabase();  
    109.             Cursor c=db.rawQuery("select * from user",null);  
    110.             while(c.moveToNext())  
    111.             {  
    112.                 int id=c.getInt(c.getColumnIndex("id"));  
    113.                 String name=c.getString(c.getColumnIndexOrThrow("name"));  
    114.                 System.out.println("Query--->id:"+id+"   name:"+name);  
    115.             }          
    116.         }  
    117.           
    118.     }  
    119. }  

    需要注意的是当我们点击“更新数据库”的按钮之后,数据库的版本更新为2。当我们再使用数据库的使用应该获得最新版本的数据库,不然的话会出现Adroid.database.sqlite.SQLiteException: Can't downgrade database from version 2 to 1的异常。

          运行效果:     

          界面

          

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

          SQLite数据库的使用

    路漫漫其修远兮 吾将上下而求索
  • 相关阅读:
    暑假练习:游戏
    Floyd算法 笔记 C/C++
    Bellman-Ford 与 SPFA 算法笔记
    Dijkstra算法 C++
    C/C++ 并查集及其优化笔记整理
    C/C++ 哈夫曼树与哈夫曼编码
    判断是否为同一颗搜索树 C/C++
    C/C++ 平衡二叉树笔记(AVL树)
    VB中 “实时错误“3704”,对象关闭时,不允许操作”
    SQL Server 2014 配置全过程
  • 原文地址:https://www.cnblogs.com/hudabing/p/3109880.html
Copyright © 2020-2023  润新知