SQlite數據庫簡介&介紹以及使用API調用

打開虛擬機的數據庫

1.xml文件

   <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="OnCreat"
        android:text="@string/creat" />
    <Button
        android:id="@+id/btn_insert"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="click"
        android:text="@string/insertdata" />
    <Button
        android:id="@+id/btn_updata"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="click"
        android:text="@string/updata" />
    <Button
        android:id="@+id/btn_delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="click"
        android:text="@string/delete" />
    <Button
        android:id="@+id/btn_insertApi"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onClick"
        android:text="@string/apiinsert" />
    <Button
        android:id="@+id/btn_updataApi"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="click"
        android:text="Api修改數據" />
    <Button
        android:id="@+id/btn_deleteApi"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="click"
        android:text="Api刪除數據" />
</LinearLayout>

2,主Activity

public class MainActivity extends AppCompatActivity {

    private MySqliteHelper helper;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        helper = DbManager.getIntance(this); //獲取了數據庫幫助類的對象
    }
    //點擊創建按鈕,創建數據庫
    public void OnCreat(View view){
        /**
         * getReadableDatabase
         * getWritableDatabase
         * 創建或打開數據庫
         * 如果使用時沒有發現數據庫就創建數據庫,如果發現則打開數據庫
         * 默認情況下兩個都表示創建或打開可讀可寫的數據庫對象
         * 如果出現磁盤已滿或數據庫權限的情況下getReadableDatabase打開的是隻讀數據庫
         *
         */
        SQLiteDatabase db = helper.getWritableDatabase();

    }

    public void click(View view){
        switch (view.getId()){
            case R.id.btn_insert:
                SQLiteDatabase db =helper.getWritableDatabase();
                String sql = "insert into "+ Constant.TABLENAME+" values(1,'zhangshan',20)";
                //雙引號裏面不能再用雙引號,要用單引號
                DbManager.execSQL(db,sql);

                String sql2 = "insert into "+ Constant.TABLENAME+" values(2,'lisi',20)";
                DbManager.execSQL(db,sql2);
                db.close(); //防止數據庫使用資源的佔用
                break;
            case R.id.btn_updata:
                db = helper.getWritableDatabase();
                String sql3 = "updata person set name = 'xiaoming' where _id=1";
                DbManager.execSQL(db,sql3);
                db.close();
                break;
            case R.id.btn_delete:
                db = helper.getWritableDatabase();
                String deletedatabase = "delete from person where _id=1";
                DbManager.execSQL(db,deletedatabase);
                db.close();
                break;
        }

    }
    public void onClick(View view){
        switch (view.getId()){
            case R.id.btn_insertApi:
                SQLiteDatabase db = helper.getWritableDatabase();
                /**
                 * table 插入數據庫的名稱
                 * String nullColumnHack SQLite規定不能插入全是空的一條數據
                 * ContentValues values 鍵爲String類型的hashmap集合
                 * 返回值long 表示插入數據的列數
                 */
                ContentValues values =new ContentValues();
                values.put(Constant._ID,3);
                values.put(Constant.NAME,"xiaoming");
                values.put(Constant.AGE,12);
                long result =db.insert(Constant.TABLENAME,null,values);
                if (result>0){
                    Toast.makeText(MainActivity.this,"插入數據成功",Toast.LENGTH_SHORT);
                }else {
                    Toast.makeText(MainActivity.this,"插入數據失敗",Toast.LENGTH_SHORT);
                }
                db.close();
                break;
            case R.id.btn_updataApi:
                db=helper.getWritableDatabase();
                /**
                 * ContentValues values 鍵爲String類型的hashmap集合
                 * String whereClause  修改的條件
                 * String[] whereArgs  修改條件的佔位符
                 */
                ContentValues cv = new ContentValues();
                cv.put(Constant.NAME,"sl");//put(需要修改的字段名稱,修改後的字段值)
                int count = db.update(Constant.TABLENAME, cv,"_id=3",null);
//                int count = db.update(Constant.TABLENAME, cv,"_id=?",new String[]{"3"});  與上面的效果完全一樣
                if (count>0){
                    Toast.makeText(MainActivity.this,"修改數據成功",Toast.LENGTH_SHORT);
                }else {
                    Toast.makeText(MainActivity.this,"修改數據失敗",Toast.LENGTH_SHORT);
                }
                db.close();
                break;
            case R.id.btn_deleteApi:
                db = helper.getWritableDatabase();
                /**
                 * String table, String whereClause, String[] whereArgs
                 */
                int  deleteresult=db.delete(Constant.TABLENAME,"_id=3",null);
                if (deleteresult>0){
                    Toast.makeText(MainActivity.this,"刪除數據成功",Toast.LENGTH_SHORT);
                }else {
                    Toast.makeText(MainActivity.this,"刪除數據失敗",Toast.LENGTH_SHORT);
                }
                db.close();
        }

    }
3,實例化一些常數

public class Constant {
    public static final String DATABASENAME="info.db"; //數據庫名稱
    public static final int DATABASE_VERSION = 1; //數據庫版本號
    public static final String TABLENAME = "person";  //表名
    public static final String NAME = "name";
    public static final String AGE = "age";
    public static final String _ID = "_id";

}
4,對數據庫操作的常用類

/**
 * 對數據庫操作的工具類
 * Created by sky on 2017/1/5.
 */
public class DbManager {
    private static MySqliteHelper helper; //構建一個幫助類的對象
    //相應類的獲取方式
    //開發模式中的單例模式
    public static MySqliteHelper getIntance(Context context) {
        if (helper == null){
            helper =new MySqliteHelper(context);
        }
        return helper;
    }

    /**
     * 根據SQL語句在數據庫中執行語句
     * 可以執行除查詢外的所有語句
     * @param db 數據庫對象
     * @param sql SQL語句
     */
    public static void execSQL(SQLiteDatabase db,String sql){
        if (db !=null){
            if (sql!=null && !"".equals(sql)){
                db.execSQL(sql);

            }
        }

    }
}
5,打開或創建數據庫的類

/**
 * Created by sky on 2017/1/5.
 * sqliteopenhelper
 * 1。提供了OnceatOnupgrade()等創建數據庫更新數據庫的方法
 * 2.提供了獲取數據庫對象的函數
 */
public class MySqliteHelper extends SQLiteOpenHelper {

    /**
     * 構造函數
     * @param context
     * @param name 表示創建數據庫的名稱
     * @param factory 遊標工廠
     * @param version 當前數據庫的版本  >=1
     */
    public MySqliteHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    public MySqliteHelper (Context context){
        super(context,Constant.DATABASENAME,null,Constant.DATABASE_VERSION);
    }
    /**
     *
     * 當數據庫創建時回d調的函數
     * @param db 數據庫對象
     */
    @Override
    public void onCreate(SQLiteDatabase db) {

        /**
         * 創建表的語句
         */
        //String sql = "creat table person(_id Integer primary key ,name varchar(10),age Integer)";
        String sql = "creat table"+Constant.TABLENAME+"("+Constant._ID+"Integer primary key,"
                +Constant.NAME+"varchar(10),"+Constant.AGE
                +" Integer)";

        /**
         * 執行SQ語句
         */
        db.execSQL(sql);
        Log.i("tag","<<<<<<<<OnCreat>>>>>>>");
    }

    /**
     * 當數據庫有版本更新時回調的函數
     * @param db
     * @param oldVersion  數據庫舊版本
     * @param newVersion  數據庫新版本
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }

    /**
     * 當數據庫打開時回調的函數
     * @param db
     */
    @Override
    public void onOpen(SQLiteDatabase db) {
        super.onOpen(db);
        Log.i("tag","<<<<<<<<OnOpen>>>>>>>");
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章