android數據存儲(三)之SQLiteDatabase

 

1.定義:SQLite是一款輕量級的關係型數據庫,運行快,佔用資源少。

2.創建數據庫

  *android爲方便管理數據庫,專門提供了SQLiteOpenHelper幫助類可以簡單地對數據庫進行創建和升級。

  *SQLiteOpenHelper是一個抽象類,有兩個抽象方法,分別是onCreate()、onUpgrade()負責數據庫的創建和升級。

  *SQLiteOpenHelper中還有兩個非常重要的實例方法:getReadableDatabase()和getWritableDatabase()。這兩個

  方法都可以創建或打開一個現有的數據庫(如數據庫已存在則直接打開,否則創建一個新的數據庫),並返回一

  個可對數據庫進行讀寫操作的對象。不同的是,當數據庫不可寫入時(如磁盤已滿),getReadableDatabase()

  方法返回的對象將以只讀的方式打開數據庫,而getWritableDatabase()方法則將出現異常。

  *SQLiteOpenHelper中有兩個構造方法可供重寫,一般使用參數少的構造方法即可。這個構造方法接收四個參數,

  第一個參數是Context,第二個參數是數據庫名,第三個參數允許我們在查詢數據的時候返回一個自定義的Cursor,

  一般都傳入null,第四個參數表示數據庫的版本號。數據庫文件存放在/data/data/<package name>/databases/目錄

  下。

  步驟:首先書寫創建語句,然後自定義一個類繼承SQLiteOpenHelper然後執行。

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <Button
        android:id="@+id/create_database"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="創建數據庫"/>
    <Button
        android:id="@+id/add_data"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="添加數據"/>

    <Button
        android:id="@+id/update_data"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="更新數據"/>

    <Button
        android:id="@+id/delete_data"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="刪除數據"/>

    <Button
        android:id="@+id/query_data"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="查詢數據"/>
</LinearLayout>
public class MyDatabaseHelper extends SQLiteOpenHelper {
    //創建數據庫
    public static final String CREATE_BOOK="create table Book("
            +"id integer primary key autoincrement,"
            +"author text,"
            +"price real,"
            +"pages integer,"
            +"name text)";
  
    private Context mContext;

    public MyDatabaseHelper(Context context,String name,SQLiteDatabase.CursorFactory 
            factory, int version) {
        super(context, name, factory, version);
        mContext=context;
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        //創建數據庫
        sqLiteDatabase.execSQL(CREATE_BOOK);
        Toast.makeText(mContext,"Created successed",Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) 
    {
        
    }
}
public class MainActivity extends AppCompatActivity {
    Button createDatabase;
    Button addData;
    Button updateData;
    Button deleteData;
    Button queryData;
    private MyDatabaseHelper dbHelper;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        createDatabase=findViewById(R.id.create_database);
        addData=findViewById(R.id.add_data);
        updateData=findViewById(R.id.update_data);
        deleteData=findViewById(R.id.delete_data);
        queryData=findViewById(R.id.query_data);

        //1創建數據庫
        dbHelper=new MyDatabaseHelper(this,"BookStore.db",null,1);
        createDatabase.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dbHelper.getWritableDatabase();
            }
        });
    }
}

3.升級數據庫

public class MyDatabaseHelper extends SQLiteOpenHelper {
    //創建數據庫
    public static final String CREATE_BOOK="create table Book("
            +"id integer primary key autoincrement,"
            +"author text,"
            +"price real,"
            +"pages integer,"
            +"name text)";
    //省級數據庫
    public static final String CREATE_CATEGORY="create table Category("
            +"id integer primary key autoincrement,"
            +"category_name text,"
            +"category_code integer)";
    private Context mContext;

    public MyDatabaseHelper(Context context,String name,SQLiteDatabase.CursorFactory
            factory, int version) {
        super(context, name, factory, version);
        mContext=context;
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        //創建數據庫
        sqLiteDatabase.execSQL(CREATE_BOOK);
        //升級數據庫
        sqLiteDatabase.execSQL(CREATE_CATEGORY);
        Toast.makeText(mContext,"Created successed",Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
        sqLiteDatabase.execSQL("drop table if exists Book");
        sqLiteDatabase.execSQL("drop table if exists Category");
        onCreate(sqLiteDatabase);
    }
}
public class MainActivity extends AppCompatActivity {
    Button createDatabase;
    Button addData;
    Button updateData;
    Button deleteData;
    Button queryData;
    private MyDatabaseHelper dbHelper;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        createDatabase=findViewById(R.id.create_database);
        addData=findViewById(R.id.add_data);
        updateData=findViewById(R.id.update_data);
        deleteData=findViewById(R.id.delete_data);
        queryData=findViewById(R.id.query_data);

        //1創建數據庫
//        dbHelper=new MyDatabaseHelper(this,"BookStore.db",null,1);
        //升級數據庫
        dbHelper=new MyDatabaseHelper(this,"BookStore.db",
                null,2);
    }
}

4.添加數據

public class MainActivity extends AppCompatActivity {
    Button createDatabase;
    Button addData;
    Button updateData;
    Button deleteData;
    Button queryData;
    private MyDatabaseHelper dbHelper;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        createDatabase=findViewById(R.id.create_database);
        addData=findViewById(R.id.add_data);
        updateData=findViewById(R.id.update_data);
        deleteData=findViewById(R.id.delete_data);
        queryData=findViewById(R.id.query_data);

        //1創建數據庫
//        dbHelper=new MyDatabaseHelper(this,"BookStore.db",null,1);
        //升級數據庫
        dbHelper=new MyDatabaseHelper(this,"BookStore.db",
                null,2);
        createDatabase.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dbHelper.getWritableDatabase();
            }
        });
        //添加數據
        addData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                SQLiteDatabase db=dbHelper.getWritableDatabase();
                ContentValues values=new ContentValues();
                values.put("name","The Da Vinci Code");
                values.put("author","Dan Brown");
                values.put("pages",454);
                values.put("price",15.34);
                //插入一條數據
                db.insert("Book",null,values);
                values.clear();
                //開始第二組數據
                values.put("name","The Lost Symbol");
                values.put("author","Dan Brown");
                values.put("pages",510);
                values.put("price",23.43);
                //插入第二條數據
                db.insert("Book",null,values);
            }
        });
    }
}

5.更新數據

        //更新數據
        updateData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                SQLiteDatabase db=dbHelper.getWritableDatabase();
                ContentValues values=new ContentValues();
                values.put("price",12.23);
                db.update("Book",values,"name=?",new String[]{
                        "The Da Vinci Code"
                });
            }
        });

6.刪除數據

        //刪除數據
        deleteData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                SQLiteDatabase db=dbHelper.getWritableDatabase();
                db.delete("Book","pages>?",new String[]{"500"});
            }
        });

7.查詢數據

        //查詢數據
        queryData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                SQLiteDatabase db=dbHelper.getWritableDatabase();
                Cursor cursor=db.query("Book",null,null,
                        null,null,null,null);
                if (cursor.moveToFirst()){
                    do {
                        String name=cursor.getString(cursor.getColumnIndex("name"));
                        String author=cursor.getString(cursor.getColumnIndex("author"));
                        int pages=cursor.getInt(cursor.getColumnIndex("pages"));
                        double price=cursor.getDouble(cursor.getColumnIndex("price"));
                    }while (cursor.moveToNext());
                }
                cursor.close();
            }
        });

 

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