利用SQLite在android上實現增刪改查,sqliteandroid

來源:互聯網
上載者:User

利用SQLite在android上實現增刪改查,sqliteandroid
利用SQLite在android上實現增刪改查方法:

一、直接利用database.execSQL()方法輸入完整sql語句進行操作

  這種方法適用於複雜的sql語句,比如多表查詢等等

  這裡適合於增刪改,這個方法沒有傳回值,而查需要返回資料,故不適用

  增執行個體:

    database.execSQL("insert into student (name,age) values ('小李',45)");

  查的話用database.rawQuery()方法,也是我們直接輸入完整的sql語句

  查執行個體:

    Cursor cursor = database.rawQuery("select id,name,age from student where name=?",new String[] { "小李" });

 

二、利用系統直接封裝好的API,原理是系統內部把參數拼成sql語句

  適用於簡單sql語句

  增: 返回操作的行

    long row=database.insert("student", null, values);

  刪: 返回受影響的行數

    int n = database.delete("student", "name=? and age=?", new String[] {"飯飯", "20" });

  改: 返回受影響的行數

    int n = database.update("student", values, "name=?",new String[] { "飯飯" });

  查: 返回資料表遊標 (注意查不是select)

    Cursor cursor = database.rawQuery("select id,name,age from student where name=?",new String[] { "小李" });

 

三、其它

1、資料庫的串連有限,所以建立串連用完要關閉

2、將我們需要操作的資料寫入ContentValues

3、查資料時,遊標通過cursor.moveToNext()方法來確定下一行是否有值,有值就讀取下一行的值

4、得到列的索引有兩種方法:

  通過尋找欄欄位對應的位置得到

    int id = cursor.getInt(cursor.getColumnIndex("id"));

  直接通過列號得到

    String name = cursor.getString(1);

 

代碼:

com.fry.database.MySQLiteOpenHelper

 1 package com.fry.database; 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 import android.util.Log; 8  9 public class MySQLiteOpenHelper extends SQLiteOpenHelper{10 11     /*12      * 1、context 上下文13      * 2、那麼資料庫名稱14      * 3、factory15      * 4、version 資料庫檔案的版本16      */17 18     public MySQLiteOpenHelper(Context context,int version) {19         super(context, "fanfan3.db", null, version);20         // TODO Auto-generated constructor stub21     }22 23     /* 資料庫檔案建立成功後調用24      * (non-Javadoc)25      * @see android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite.SQLiteDatabase)26      */27     @Override28     public void onCreate(SQLiteDatabase db) {29         Log.d("fanfan", "onCreate");30         db.execSQL("CREATE TABLE student(id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,age INTEGER)");31     }32 33     /* 資料庫檔案更新後調用 34      * (non-Javadoc)35      * @see android.database.sqlite.SQLiteOpenHelper#onUpgrade(android.database.sqlite.SQLiteDatabase, int, int)36      */37     @Override38     public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {39         Log.d("fanfan", "onUpgrade");40     }41 42 }
資料庫類

com.fanfan.test.Test

  1 package com.fanfan.test;  2   3 import com.fry.database.MySQLiteOpenHelper;  4   5 import android.annotation.SuppressLint;  6 import android.content.ContentValues;  7 import android.database.Cursor;  8 import android.database.sqlite.SQLiteDatabase;  9 import android.test.AndroidTestCase; 10 import android.util.Log; 11  12 public class Test extends AndroidTestCase { 13     public void test1() { 14         MySQLiteOpenHelper helper = new MySQLiteOpenHelper(getContext(), 1); 15         SQLiteDatabase database = helper.getReadableDatabase(); 16         helper.getWritableDatabase(); 17     } 18  19     // 系統提供的API可以解決簡單問題,但是比如多表查詢的問題,系統搞不定,我們可以自己用execSQL寫sql語句 20     public void insert() { 21         MySQLiteOpenHelper helper = new MySQLiteOpenHelper(getContext(), 1); 22         SQLiteDatabase database = helper.getReadableDatabase(); 23         // ContentValues values=new ContentValues(); 24         // values.put("name", "飯飯"); 25         // values.put("age", 20); 26         // long row=database.insert("student", null, values); 27         // Log.d("insert", "剛剛插入的是行的編號為:  "+row); 28         // if(row==-1){ 29         // String s="插入失敗"; 30         // Log.d("insert", s); 31         // } 32         // 不用系統API,自己寫sql 33         database.execSQL("insert into student (name,age) values ('小李',45)"); 34         // 關閉資料庫連接 35         database.close(); 36     } 37  38     public void delete() { 39         MySQLiteOpenHelper helper = new MySQLiteOpenHelper(getContext(), 1); 40         SQLiteDatabase database = helper.getReadableDatabase(); 41         // 返回受影響的行數 42         int n = database.delete("student", "name=? and age=?", new String[] { 43                 "飯飯", "20" }); 44         Log.d("delete", "返回受影響的行數為:  " + n); 45         // 關閉資料庫連接 46         database.close(); 47     } 48  49     public void update() { 50         MySQLiteOpenHelper helper = new MySQLiteOpenHelper(getContext(), 1); 51         SQLiteDatabase database = helper.getReadableDatabase(); 52         ContentValues values = new ContentValues(); 53         values.put("name", "小紅"); 54         // 返回受影響的行數 55  56         // 更改符合篩選條件的記錄 57         int n = database.update("student", values, "name=?", 58                 new String[] { "飯飯" }); 59         // 更改表中所有記錄 60         // int n=database.update("student", values, null, null); 61         Log.d("update", "返回受影響的行數為:  " + n); 62         // 關閉資料庫連接 63         database.close(); 64     } 65  66     public void select() { 67         MySQLiteOpenHelper helper = new MySQLiteOpenHelper(getContext(), 1); 68         // 建立資料庫連接 69         SQLiteDatabase database = helper.getReadableDatabase(); 70         /* 71          * distinct==true 剔除重複資料 table 表名 column 查詢的列 selection 篩選條件 72          * selsetionArgs 指定篩選條件參數值 groupBy 分組 having 分組篩選 orderBy 排序 比如"age asc" 73          * limit 分頁 74          */ 75         // select * from student where 76         // 返回的是一個結果集合 77         // Cursor cursor=database.query(true, "student", new 78         // String[]{"id","name","age"}, null, null, null, null, null, null); 79  80         // 如果多表查詢,上面的方法不行,因為database.execSQL沒有傳回值,我們無法返回結果 81         Cursor cursor = database.rawQuery( 82                 "select id,name,age from student where name=?", 83                 new String[] { "小李" }); 84  85         // 下一行是否有資料 86         while (cursor.moveToNext()) { 87             // 具體得那一列的索引 88             // 通過索引得到 89             int id = cursor.getInt(cursor.getColumnIndex("id"));// id是第0列 90             // 直接通過列號得到 91             String name = cursor.getString(1); 92             int age = cursor.getInt(2); 93             String ans = "id:  " + id + "      name:  " + name + "     age:  " 94                     + age; 95             Log.d("select", ans); 96         } 97         // 關閉資料庫連接 98         database.close(); 99     }100 }
JUnit 測試增刪改查

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.