Android下建立一個SQLite資料庫,androidsqlite
資料庫:SQLite(輕量級,嵌入式的資料庫)
大量的相似結構的資料的儲存,快速的查詢。特殊的檔案(按照一定的格式產生)
資料庫的建立
建立檔案
1.聲明檔案對象,檔案是不會被建立出來的。
File file = new File("檔案名稱");
2.寫檔案(檔案才會被建立出來)
FileOutputStream fos = new FileOutputStream(file);
fos.write("hdahfdsaklfh".getbytes());
建立資料庫
1.實現SQLiteOpenHelper的子類PersonSQLiteOpenHelper
public class PersonSQLiteOpenHelper extends SQLiteOpenHelper { public PersonSQLiteOpenHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteDatabase arg0) { // TODO Auto-generated method stub } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub }}
SQLiteOpenHelper的幾個參數的解釋如下:
android.database.sqlite.SQLiteOpenHelper.SQLiteOpenHelper(Context context, String name, CursorFactory factory, int version)Create a helper object to create, open, and/or manage a database. This method always returns very quickly. The database is not actually created or opened until one of getWritableDatabase or getReadableDatabase is called.Parameters:context to use to open or create the databasename of the database file, or null for an in-memory databasefactory to use for creating cursor objects, or null for the defaultversion number of the database (starting at 1); if the database is older, onUpgrade will be used to upgrade the database; if the database is newer, onDowngrade will be used to downgrade the database
2.getWritableDatabase/getReadableDatabase()
建立TestPersonDB.java
package com.wuyudong.db.test;import com.wuyudong.db.PersonSQLiteOpenHelper;import android.test.AndroidTestCase;public class TestPersonDB extends AndroidTestCase { public void testCreateDB() throws Exception { PersonSQLiteOpenHelper helper = new PersonSQLiteOpenHelper(getContext()); helper.getWritableDatabase(); }}
3.onCreate() 資料庫第一次建立的執行的方法,適合做資料庫表結構的初始化
// Called when the database is created for the first time. // 在資料庫第一次建立的時候執行的方法 // 如果資料庫已經建立完畢,就不會再去執行了。 // 適合做資料庫表結構的初始化操作 // db代表的就是當前的資料庫 @Override public void onCreate(SQLiteDatabase db) { // 初始化資料庫的表結構 db.execSQL("create table person (id integer primary key autoincrement, name varchar(20), number varchar(20))"); }
注意:
sqlite資料庫是一個嵌入式輕量級的資料庫,內部不區分資料類型的,不對資料的長度校正。
建立AndroidTest工程test
將AndroidManifest.xml中的如下相關的代碼複製到本項目的AndroidManifest.xml中
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.wuyudong.db.test" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.wuyudong.db" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <uses-library android:name="android.test.runner" /> </application></manifest>
複製後的代碼如下:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.wuyudong.db" android:versionCode="1" android:versionName="1.0" > <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.wuyudong.db" /> <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <uses-library android:name="android.test.runner" /> <activity android:name="com.wuyudong.db.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>
項目結構如下:
PersonSQLiteOpenHelper.java完整代碼如下:
package com.wuyudong.db;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class PersonSQLiteOpenHelper extends SQLiteOpenHelper { /** * 定義一個資料庫建立的協助類,裡面有兩個方法需要實現 相當於 file類 * * @author Administrator * */ public PersonSQLiteOpenHelper(Context context) { // context 上下文 // person.db 資料庫檔案名稱 // factory 遊標工廠 // version 資料庫的版本號碼 從1開始 super(context, "person.db", null, 1); // TODO Auto-generated constructor stub } // Called when the database is created for the first time. // 在資料庫第一次建立的時候執行的方法 // 如果資料庫已經建立完畢,就不會再去執行了。 // 適合做資料庫表結構的初始化操作 // db代表的就是當前的資料庫 @Override public void onCreate(SQLiteDatabase db) { // 初始化資料庫的表結構 db.execSQL("create table person (id integer primary key autoincrement, name varchar(20), number varchar(20))"); } // 當資料庫的版本號碼發生升級的時候調用。 // 資料庫只能升級不能降級。 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub }}
運行程式
開啟person.db