先上一個小程式,具體的解析介紹會在以後的文章中詳細說明,已經淩晨0:40了,我實在是困了,只能把這活移到明天了。今天先把代碼粘貼上。
:(向資料庫中存入資料,然後再把資料讀出來)
main.xml
<?xml version="1.0" encoding="utf-8"?><br /><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"<br /> android:orientation="vertical"<br /> android:layout_width="fill_parent"<br /> android:layout_height="fill_parent"<br /> ><br /><TextView<br /> android:layout_width="fill_parent"<br /> android:layout_height="wrap_content"<br /> android:id="@+id/textView"<br /> /><br /></LinearLayout><br />
activity的代碼
package cn.com.SQLite;</p><p>import java.util.ArrayList;</p><p>import android.app.Activity;<br />import android.content.ContentValues;<br />import android.content.Context;<br />import android.database.Cursor;<br />import android.database.sqlite.SQLiteDatabase;<br />import android.database.sqlite.SQLiteOpenHelper;<br />import android.database.sqlite.SQLiteDatabase.CursorFactory;<br />import android.os.Bundle;<br />import android.util.Log;<br />import android.widget.TextView;</p><p>/**<br /> *<br /> * @author chenzheng_java<br /> * @description SQLite資料庫在android中的應用<br /> * @since 2011/03/05<br /> *<br /> */<br />public class SQLiteActivity extends Activity {<br />private String result = "結果:/n";<br />private String tableName = "chenzheng_Java";<br />public static final int version_1 = 1;</p><p>@Override<br />public void onCreate(Bundle savedInstanceState) {<br />super.onCreate(savedInstanceState);<br />setContentView(R.layout.main);<br />run();<br />TextView textView = (TextView) findViewById(R.id.textView);<br />textView.setText(result);<br />}</p><p>/**<br /> *@description 對資料進行增刪改查<br /> */<br />private void run() {<br />clear();<br />save();<br />read();<br />}</p><p>/**<br /> * 從資料表中讀出記錄<br /> */<br />private void read() {<br />MySqliteOpenHandler handler = new MySqliteOpenHandler(this, tableName,<br />null, version_1);<br />SQLiteDatabase database = handler.getWritableDatabase();<br />Cursor cursor = database.query(tableName, null, null, null, null, null,<br />null);<br />int count = cursor.getCount();<br />Log.i("通知", "總記錄數" + count);</p><p>int index = cursor.getColumnIndex("name");<br />Log.i("通知", "nameIndex" + index);<br />int indexOfAge = cursor.getColumnIndex("age");</p><p>cursor.moveToFirst();<br />while (!cursor.isAfterLast()) {<br />Log.i("通知", "here");<br />String name = cursor.getString(index);<br />result += "/n 姓名:" + name;<br />int age = cursor.getInt(indexOfAge);<br />result += " 年齡:" + age;<br />cursor.moveToNext();<br />}<br />database.close();<br />}</p><p>/**<br /> * 儲存一些資料到表中<br /> */<br />private void save() {<br />ArrayList<Beauty> beautyList = getData();<br />MySqliteOpenHandler handler = new MySqliteOpenHandler(<br />SQLiteActivity.this, tableName, null, version_1);<br />SQLiteDatabase database = handler.getWritableDatabase();<br />for (Beauty beauty : beautyList) {<br />// 開始事物<br />database.beginTransaction();<br />// 以索引值對形式儲存列名和值的對象<br />ContentValues contentValues = new ContentValues();<br />contentValues.put("name", beauty.getName());<br />contentValues.put("age", beauty.getAge());<br />long flag = database.insertOrThrow(tableName, "age", contentValues);<br />Log.i("通知", beauty.toString());<br />if (flag == -1) {<br />Log.i("通知", "insert操作失敗");<br />} else {<br />database.setTransactionSuccessful();<br />}<br />// 結束事物<br />database.endTransaction();<br />}</p><p>database.close();</p><p>}</p><p>/**<br /> * 清除表中原有的記錄<br /> */<br />private void clear() {<br />MySqliteOpenHandler handler = new MySqliteOpenHandler(<br />SQLiteActivity.this, tableName, null, version_1);<br />SQLiteDatabase database = handler.getWritableDatabase();<br />database.delete(tableName, null, null);<br />database.close();</p><p>}</p><p>/**<br /> *<br /> * @return 初始化資料<br /> */<br />private ArrayList<Beauty> getData() {<br />ArrayList<Beauty> beautyList = new ArrayList<Beauty>();<br />Beauty beauty = null;</p><p>beauty = new Beauty("小醫仙", 23);<br />beautyList.add(beauty);</p><p>beauty = new Beauty("蕭薰兒", 21);<br />beautyList.add(beauty);</p><p>beauty = new Beauty("杜梅莎女王", 24);<br />beautyList.add(beauty);</p><p>return beautyList;</p><p>}</p><p>/**<br /> * @author chenzheng_java<br /> * @description 實現我們自己的sqlite的建立及更新協助類<br /> * @since 2011/03/05<br /> */<br />private class MySqliteOpenHandler extends SQLiteOpenHelper {</p><p>public MySqliteOpenHandler(Context context, String name,<br />CursorFactory factory, int version) {<br />super(context, name, factory, version);<br />Log.i("通知", "MySqliteOpenHandler執行個體化完畢");<br />}</p><p>/**<br /> * onCreate方法在系統中不存在使用者查詢的表時執行,我們在這裡可以實現該方法並做一些額外的操作<br /> */<br />@Override<br />public void onCreate(SQLiteDatabase db) {<br />db.execSQL("drop table if exists " + tableName);<br />db<br />.execSQL("create table if not exists '"<br />+ tableName<br />+ "' (id INTEGER primary key,name varchar(20),age INTEGER)");</p><p>Log.i("通知", "建立表成功!");<br />}</p><p>/**<br /> * onUpgrade方法在系統中應用版本發生改變的時候執行<br /> */<br />@Override<br />public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {<br />Log.i("通知", "版本升級成功!");</p><p>}</p><p>}</p><p>/**<br /> *<br /> * @author chenzheng_Java<br /> * @description 美人實體類<br /> */<br />private class Beauty {<br />String name;<br />int age;</p><p>public Beauty() {<br />}</p><p>public Beauty(String name, int age) {<br />this.name = name;<br />this.age = age;<br />}</p><p>public String getName() {<br />return name;<br />}</p><p>public void setName(String name) {<br />this.name = name;<br />}</p><p>public int getAge() {<br />return age;<br />}</p><p>public void setAge(int age) {<br />this.age = age;<br />}</p><p>@Override<br />public String toString() {<br />return "Beauty [age=" + age + ", name=" + name + "]";<br />}</p><p>}</p><p>}
其他都為預設。運行,便可得到如上結果。
------------------------------------------------------------------------
這裡請注意一點,MySqliteOpenHandler該類的構造方法中,第二個參數,實際上代表的是資料庫的名字,而並非表名稱,這裡直接使用了表名進行構建,是為了讓代碼看的稍微少些,也滿足下筆者偷懶的慾望,呵呵。切記 切記