編輯:關於Android編程
我個人感覺安卓自帶的數據庫用的不是太多的,畢竟現在很多應用都直接和服務器數據庫進行交互,或者直接API獲取一些接口的數據,但是不可否認自帶的數據庫還是有一些作用的,所以我們還是需要對自帶的數據庫進行一定的學習和研究。(前面都是廢話)進入正題:
Android為了讓我們更好的管理數據庫,專門提供了一個SQLiteOpenHelper幫助類,借助這個類就可以簡單地對數據庫進行創建和升級。SQLiteOpenHelper是一個抽象類,啥是抽象類?抽象類就像領導,一般自己不干活(實例化),只發號司令,所以要想用這個類就必須自己創建一個類去繼承它。此外這個類裡面還有兩個抽象方法,onCreate()和onUpgrade(),我們必須在自己的幫助類裡重寫這兩個方法,然後用這兩個方法去創建和升級數據庫。
這個類裡還有兩個重要的實例方法,getReadableDatabase()和getWritableDatabase()。這兩個方法都可以創建或打開一個現有的數據庫(如果數據庫存在則打開,如果不存在則創建一個新的數據庫)話說這兩個方法有啥不同呢?當數據庫不可寫入的時候(比如磁盤已滿)第一個方法以只讀的方式打開,第二個方法就會出現異常。
廢話理論不多說了,下面看一下建表語句:
create table Book( id integer primary key autoincrement, author text, price real, pages integer, name text)
假如上面的看不懂,那你要稍微對SQL語句了解一下,這個不難。
下面編寫代碼:
package org.lxh.demo; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; import android.widget.Toast; 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)";// SQL語句自己寫吧 private Context mcontext;// 上下文對象,這玩意很多地方用得到 public MyDatabaseHelper(Context context, String name,// 構造方法也自動生成了 CursorFactory factory, int version) { super(context, name, factory, version); mcontext = context; } @Override public void onCreate(SQLiteDatabase db) {// 自動覆寫了 db.execSQL(CREATE_BOOK);// 創建數據庫 Toast.makeText(mcontext, "Create succeeded", Toast.LENGTH_SHORT).show(); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// 自動覆寫了 // TODO Auto-generated method stub } }
然後我們在布局文件中搞一個按鈕:
最後創建一個按鈕監聽在MainActivity裡
package org.lxh.demo; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { private Button create; private MyDatabaseHelper myDatabaseHelper; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 生命周期方法 super.setContentView(R.layout.main); // 設置要使用的布局管理器 create = (Button) findViewById(R.id.btn); myDatabaseHelper = new MyDatabaseHelper(this, "BookStore", null, 1);//構造方法裡有四個參數哎,填好 create.setOnClickListener(new OnClickListener() {// 匿名內部類 public void onClick(View v) { myDatabaseHelper.getWritableDatabase();// 調用實例方法getWritableDatabase()創建數據庫 } }); } }
點擊創建按鈕就成功創建了,沒來的及截圖到Toast(因為它只出現一次,也就是數據庫只創建一次,自行測試吧):
創建MyDatabaseHelper 中還有一個覆寫的方法沒用呢,就是onUpgrade()是用於對數據庫進行更新的。比如數據庫已有一張Book表了,我們現在還想創建一個Catagory表:
package org.lxh.demo; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; import android.widget.Toast; 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)";// SQL語句自己寫吧 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,// 構造方法也自動生成了 CursorFactory factory, int version) { super(context, name, factory, version); mcontext = context; } @Override public void onCreate(SQLiteDatabase db) {// 自動覆寫了 db.execSQL(CREATE_BOOK); db.execSQL(CREATE_CATEGORY); Toast.makeText(mcontext, "Create succeeded", Toast.LENGTH_SHORT).show(); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// 自動覆寫了 db.execSQL("drop table if exists Book");//先刪除 db.execSQL("drop table if exists Category"); onCreate(db);//最後再創建 } }
MainActivity.java:
package org.lxh.demo; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { private Button create; private MyDatabaseHelper myDatabaseHelper; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 生命周期方法 super.setContentView(R.layout.main); // 設置要使用的布局管理器 create = (Button) findViewById(R.id.btn); myDatabaseHelper=new MyDatabaseHelper(this, "BookStore", null, 2);// 這裡版本號改成2 create.setOnClickListener(new OnClickListener() {// 匿名內部類 public void onClick(View v) { myDatabaseHelper.getWritableDatabase();// 調用實例方法getWritableDatabase()創建數據庫 Log.d("Success", "chenggong"); } }); } }
運行如下:
下面我們怎麼知道自己創建的數據庫有木有成功呢?在哪兒能看到他們呢?我們要通過adb了,這是Android SDK自帶的一個調試工具,怎麼用嫩?首先你要將你的platform_tools目錄配置到環境變量中去:
然後在DOS界面下輸入:adb shell,進入到設備的控制台:
然後鍵入:cd /data/data/org.lxh.demo/databases/下:
鍵入sqlite3 BookStore.db:
然後鍵入:.table:
1.介紹Runtime Permissions官方說明Android 6.0之前,權限在應用安裝過程中只詢問一次,以列表的形式展現給用戶,然而大多數用戶並不會注意到這些,
先看一下singleTop啟動模式的說明:可以有多個實例,但是不允許此Activity的多個實例疊加。即,如果此Activity有實例在棧頂的時候,啟動這個Activit
1080P全高清屏幕雖然可為手機帶來更細膩的視界,但同時也會增加系統負載,拖慢游戲速度(和同配置720P手機相比)。那麼,如何才能提高1080P手機的游戲速
搶紅包,先看效果圖~實現自動搶紅包,解決問題有兩點:一:如何實時監聽發紅包的事件二:如何在紅包到來的時候自動進入頁面並自動點擊紅包一、如何獲取紅包到來的事件為了獲取紅包到