android-データベースSQLite関連

26052 ワード

AndroidプラットフォームのSQLiteデータベースは、標準的なSQL文をサポートする軽量レベルのデータベースです.
ここでは、
  • androidデータベースの作成
  • sql文を使用してデータベースを削除する
  • システムapiデータベース削除
  • データベースのトランザクション
  • 1、データベースの作成
    手順:
  • クラス継承SQLiteOpenHelper
  • を書く
  • コンストラクション関数でデータベース名、カーソルファクトリ、バージョン番号
  • を指定します.
  • データベースを初期化し、getWritableDatabaseまたはgetReadableDatabaseを実行し、データベースを作成または開く.
  • onCreateでSQL作成文
  • を実行
  • androidプラットフォームのデータベースの作成には、SQLiteOpenHelperを継承する補助クラスが必要であり、親クラスの構築方法を書き換える必要があります.
  • /** 
    *                SQLiteOpenHelper 
    * 
    * @author wgk 
    * 
    */ 
    public class PersonSQLiteOpenHelper extends SQLiteOpenHelper {
    
        public PersonSQLiteOpenHelper(Context context) { 
            super(context, "PERSON.db", null, 1);//   super,            
        }
    
        /** 
         * 
         *     ,         ,    /  /        
         * 
         * @param context 
         *                
         * @param name 
         *                     
         * @param factory 
         *                 Cursor   (  ),         .         . 
         * @param version 
         *                  
         */ 
        public PersonSQLiteOpenHelper(Context context, String name, 
                CursorFactory factory, int version) { 
            super(context, name, factory, version); 
        }
    
        @Override 
        //
        public void onCreate(SQLiteDatabase db) { 
            //     
            db.execSQL("create table person (" 
                    + " _id integer primary key autoincrement, " 
                    + " name varchar(20), " + " age integer);"); 
        }
    
        @Override 
        //              
        //            
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
            // TODO Auto-generated method stub
    
      }
    
    }

    このクラスは補助クラスにすぎません.データベースを使用するには、データベースアクセスクラスPersonDAOを作成する必要があります.
  • 2、データベースを削除して
  • を調べる
  • public class PersonDAO{
    
        private final Context context;
        private PersonSQLiteOpenHelper helper;
    
        public PersonDAO(Context context) {
            this.context = context;
            helper = new PersonSQLiteOpenHelper(context);
        }
    
        /**
         * @param name
         * @param age
         */
        public void add(String name, int age) {
            SQLiteDatabase db = helper.getWritableDatabase();
            // db.execSQL("insert into person (name,age) values ('"+name+"',"+age+")");
            //   SQL  
            db.execSQL("insert into person (name,values) values(?,?)",
                    new Object[] { name, age });
        }
    
        /**
         *           
         * 
         * @param name
         */
        public void delete(String name) {
            SQLiteDatabase db = helper.getWritableDatabase();
            db.execSQL("delete from person where name=?", new Object[] { name });
        }
    
    //        
    public void update(int age, String name) {
            SQLiteDatabase db = helper.getWritableDatabase();
            db.execSQL("update person set age=? where name=?", new Object[] { age,name });
        }
    
        public void querySingleRecord(String nameStr) {
            SQLiteDatabase db = helper.getReadableDatabase();
            Cursor cursor = db.rawQuery("select * from person where name=?",new String[] { nameStr });
    
            if (cursor != null && cursor.moveToFirst()) {
                String _id = cursor.getString(0);
                String name = cursor.getString(1);
                String age = cursor.getString(2);
                System.out.println("_id: " + _id);
                System.out.println("name: " + name);
                System.out.println("age: " + age);
                cursor.close();
            }
        }
    
        /**
         *       
         */
        public void queryAll() {
            SQLiteDatabase db = helper.getReadableDatabase();
            Cursor cursor = db.rawQuery("select * form person", null);
    
            if (cursor != null && cursor.getCount() > 0) {
                while (cursor.moveToNext()) {
                    int _id = cursor.getInt(cursor.getColumnIndex("_id"));
                    String name = cursor.getString(cursor.getColumnIndex("name"));
                    int age = cursor.getInt(cursor.getColumnIndex("age"));
                    System.out.println("_id: " + _id);
                    System.out.println("name: " + name);
                    System.out.println("age: " + age);
                    System.out.println("-----------------");
                }
                cursor.close();
            }
        }
    
    }

  • 注:データベース・アシスタント・クラス・オブジェクトを取得した場合、データベースは作成されず、getxxxxdDatabaseメソッド(読み取り可能または書き込み可能なデータベースの作成)が呼び出された場合にのみ作成されます.
  • //         
    PersonSQLiteOpenHelper helper = new PersonSQLiteOpenHelper(getContext());
    //       /      ,         
    helper.getWritableDatabase();
     

    3,googleのapiを使用してデータベース
  • を操作する

  • SQL文を使用して削除・変更を行うほか、googleが提供するapiも使用できます.
    //    
    //    
        db.insert("person", "name", values);
    
       //  
        db.delete("person", "name=?", new String[]{name});
    
       //  
        db.update("person", values, "name=?", new String[]{name});
    
        // 
        Cursor cursor = db.query("person",  //   
                null,  //       new String[]{name,age}
                "name = ?",  //     
                new String[]{nameStr},//     
                null,   //    
                null,   //   
                null);   //   

    Googleのapiを使ってPersonDAOを修正し、以下のようにします.
    /**
     *   google   api      
     * 
     *        
     * @author wgk
     *
     */
    public class PersonDAO3 {
        
        private final Context context;
        private PersonSQLiteOpenHelper helper;
        public PersonDAO3(Context context){
            this.context=context;
            helper=new PersonSQLiteOpenHelper(context);
        }
        /**
         *       
         * @param name
         * @param age
         */
        public void add(String name,int age){
            SQLiteDatabase db=helper.getWritableDatabase();
            ContentValues values=new ContentValues();
            values.put("name", name);
            values.put("age", age);
            
            //           ,            ,     
            String nullColumnHack="null";
            long insert=db.insert("person", nullColumnHack, values);
            System.out.println(insert);
        }
        /**
         *           
         * @param name
         */
        public void delete(String name){
            SQLiteDatabase db=helper.getWritableDatabase();
            int delete=db.delete("person", "name=?", new String[]{name});
            System.out.println(delete);            
        }
        /**
         *     !    
         * @param age
         * @param name
         */
        public void update(int age,String name){
            SQLiteDatabase db=helper.getWritableDatabase();
            ContentValues values=new ContentValues();
            values.put("age", age);
            int update =db.update("person", values, "name=?", new String[]{name});
            System.out.println(update);
        }
        
        /**
         *  !        
         * @param name
         */
        public void querySingleRecord(String nameStr){
            SQLiteDatabase db=helper.getReadableDatabase();
            Cursor cursor=db.query("person",
                    null,//  
                    "name=?",//    
                    new String[]{nameStr},//    
                    null, //  
                    null,//  
                    null);//  
            if(cursor!=null&&cursor.moveToFirst()){
                String _id=cursor.getString(0);
                String name=cursor.getString(1);
                String age=cursor.getString(2);
                System.out.println("_id: " + _id);
                System.out.println("name: " + name);
                System.out.println("age: " + age);
                
                //  cursor
                //  cursor
                //  cursor
                cursor.close();
            }
            
        }
        /**
         *       
         */
        public void queryAll(){
            SQLiteDatabase db=helper.getReadableDatabase();
            Cursor cursor=db.query("person",
                    null,
                    null,
                    null, 
                    null, 
                    null, 
                    "_id DESC");//  
            if(cursor!=null&&cursor.getCount()>0){
                while(cursor.moveToNext()){
                    int _id=cursor.getInt(cursor.getColumnIndex("_id"));
                    String name=cursor.getString(cursor.getColumnIndex("name"));
                    int age=cursor.getInt(cursor.getColumnIndex("age"));
                    
                    System.out.println("_id: " + _id);
                    System.out.println("name: " + name);
                    System.out.println("age: " + age);
                   
                  }
                //  cursor
                //  cursor
                //  cursor
                cursor.close();
            }
        }        
    }

    両方式の比較1.SQL文を利用して添削を行う利点:柔軟で、必要に応じて表のカスケードクエリーを行う.短所:エラーが発生しやすい.戻り値が2.システムAPIを利用して追加削除して利点を調べる:エラーが発生しにくい.戻り値の欠点があります:柔軟ではありませんて、効率は少し低くて、sql文をつなぎ合わせるのに時間がかかります-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  • (安全性)銀行振込:
  • 転出、laowang口座10000->1000->
  • 転出
  • 転入、xiaosan口座0受信1000
  •  
  • (高効率)データの挿入:
  • データベースの運用効率を向上させ、約6倍の速度で
  • を向上させる.
  • データを開く

  • laowangでxiaosanに1000を振り替える例でdemoを書きます.
    public class TransactionDemo extends AndroidTestCase{
        
        public void transactionDemo(){
            
            PersonSQLiteOpenHelper helper= new PersonSQLiteOpenHelper(getContext());
            //          
             SQLiteDatabase db=helper.getWritableDatabase();
            try{
                  //    
                   db.beginTransaction();
                
                  //  1000
                 db.execSQL("update person set money=money-1000 where name=?", new Object[]{"laowang"});
                
                //         ,             ,         ,          ,        
                //int i =1/0;
                //  1000
                db.execSQL("update person set money=money+1000 where name=?", new Object[]{"xiaosan"});
                //     
                  db.setTransactionSuccessful();
            }catch (Exception e){
                e.printStackTrace();
            }finally{
                db.endTransaction();
                
            }
        }

    まとめ:-----------------------------------------------------------土台は磐石のように!!