參考:http://blog.csdn.net/jianghuiquan/article/details/8569252 在Android平臺上,集成了一個嵌入式關係型資料庫—SQLite。以SQLite是一款輕型資料庫:SQLite3支持 NULL、INTEGER、REAL(浮點數字)、TEXT(
參考:http://blog.csdn.net/jianghuiquan/article/details/8569252
在Android平臺上,集成了一個嵌入式關係型資料庫—SQLite。以SQLite是一款輕型資料庫:SQLite3支持 NULL、INTEGER、REAL(浮點數字)、TEXT(字元串文本)和BLOB(二進位對象)數據類型,雖然它支持的類型只有五種,但實際上sqlite3也接受varchar(n)、char(n)、decimal(p,s) 等數據類型,只不過在運算或保存時會轉成對應的五種數據類型。
SQLite可以解析大部分標準SQL語句。
一、設計界面
1、佈局文件
打開activity_main.xml文件。
輸入以下代碼:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#EFEFEF"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/prompt" android:textColor="@drawable/black" /> <EditText android:id="@+id/editbook" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="@drawable/black" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="作者:" android:textColor="@drawable/black" /> <EditText android:id="@+id/editauthor" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="@drawable/black" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="出版社:" android:textColor="@drawable/black" /> <EditText android:id="@+id/editpublisher" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="@drawable/black" /> <ListView android:id="@+id/listview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/black" /> </LinearLayout>
2、自定義列表文件
打開list.xml文件。
輸入以下代碼:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <CheckedTextView android:id="@+id/textbookname" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/list_drive1" /> <CheckedTextView android:id="@+id/textauthor" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <ImageView android:id="@+id/imageView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/list_drive1" /> <CheckedTextView android:id="@+id/textpublisher" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
color.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <drawable name="black">#000000</drawable> <drawable name="list_drive">#00000FFF</drawable> <drawable name="white">#FFFFFFFF</drawable> <drawable name="gray">#EFEFEF</drawable> </resources>
string.xml
<resources> <string name="app_name">My</string> <string name="hello_world">Hello world!</string> <string name="action_settings">Settings</string> <string name="prompt">書名:(請使用菜單:完成新增、修改、查詢、刪除記錄)</string> <string name="addrec">新增</string> <string name="editrec">修改</string> <string name="queryrec">查詢</string> <string name="delrec">刪除</string> </resources>
二、程式文件
1、SQLiteHelper.java文件
然後輸入以下代碼:
package com.example.yanlei.my; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class SQLiteHelper extends SQLiteOpenHelper { private final static String DATABASE_NAME = "Library"; private final static int DATABASE_VERSION = 1; private final static String TABLE_NAME = "Book"; //構造函數,創建資料庫 public SQLiteHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } //建表 public void onCreate(SQLiteDatabase db) { String sql = "CREATE TABLE " + TABLE_NAME + "(_id INTEGER PRIMARY KEY," + " BookName VARCHAR(30) NOT NULL," + " Author VARCHAR(20)," + " Publisher VARCHAR(30))"; db.execSQL(sql); } public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { String sql = "DROP TABLE IF EXISTS " + TABLE_NAME; db.execSQL(sql); onCreate(db); } //獲取游標 public Cursor select() { SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.query(TABLE_NAME, null, null, null, null, null, null); return cursor; } //插入一條記錄 public long insert(String bookName,String author,String publisher ) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues cv = new ContentValues(); cv.put("BookName", bookName); cv.put("Author", author); cv.put("Publisher", publisher); long row = db.insert(TABLE_NAME, null, cv); return row; } //根據條件查詢 public Cursor query(String[] args) { SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery("SELECT * FROM "+TABLE_NAME+" WHERE BookName LIKE ?", args); return cursor; } //刪除記錄 public void delete(int id) { SQLiteDatabase db = this.getWritableDatabase(); String where ="_id = ?"; String[] whereValue = { Integer.toString(id) }; db.delete(TABLE_NAME, where, whereValue); } //更新記錄 public void update(int id, String bookName,String author,String publisher) { SQLiteDatabase db = this.getWritableDatabase(); String where = "_id = ?"; String[] whereValue = { Integer.toString(id) }; ContentValues cv = new ContentValues(); cv.put("BookName", bookName); cv.put("Author", author); cv.put("Publisher", publisher); db.update(TABLE_NAME, cv, where, whereValue); } }
2、MainActivity.java文件
然後輸入以下代碼:
package com.example.yanlei.my; import android.database.Cursor; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.EditText; import android.widget.ListView; import android.widget.SimpleCursorAdapter; public class MainActivity extends AppCompatActivity { private SQLiteHelper helper; private Cursor cursor; private ListView lvBook; private EditText editBook; private EditText editAuthor; private EditText editPublisher; private int id = 0; protected final static int MENU_ADD = Menu.FIRST; protected final static int MENU_EDIT = Menu.FIRST + 1; protected final static int MENU_QUERY = Menu.FIRST + 2; protected final static int MENU_DELETE = Menu.FIRST + 3; //執行菜單選項 public boolean onOptionsItemSelected(MenuItem item) { super.onOptionsItemSelected(item); switch (item.getItemId()) { case MENU_ADD: this.addRec(); break; case MENU_EDIT: this.editRec(); break; case MENU_QUERY: this.queryRec(); break; case MENU_DELETE: this.deleteRec(); break; } return true; } //初始化菜單 public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); menu.add(Menu.NONE, MENU_ADD, 0, R.string.addrec).setIcon(android.R.drawable.ic_menu_add); menu.add(Menu.NONE, MENU_EDIT, 0, R.string.editrec).setIcon(android.R.drawable.ic_menu_edit); menu.add(Menu.NONE, MENU_QUERY, 0, R.string.queryrec).setIcon(android.R.drawable.ic_menu_search); menu.add(Menu.NONE, MENU_DELETE, 0, R.string.delrec).setIcon(android.R.drawable.ic_menu_delete); return true; } public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lvBook = (ListView) this.findViewById(R.id.listview); editBook = (EditText) this.findViewById(R.id.editbook); editAuthor = (EditText) this.findViewById(R.id.editauthor); editPublisher = (EditText) this.findViewById(R.id.editpublisher); //表中內容填充到自定義ListView helper = new SQLiteHelper(this); cursor = helper.select(); SimpleCursorAdapter adapter = new SimpleCursorAdapter( this, R.layout.list, cursor, new String[]{"BookName", "Author", "Publisher"}, new int[]{R.id.textbookname, R.id.textauthor, R.id.textpublisher} ); lvBook.setAdapter(adapter); // lvBook設置OnItemClickListener監聽事件 lvBook.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { cursor.moveToPosition(arg2); // 將cursor移到所點擊的值 id = cursor.getInt(0); // 取得欄位_id的值 editBook.setText(cursor.getString(1)); // 取得欄位Rec_text的值 editAuthor.setText(cursor.getString(2)); editPublisher.setText(cursor.getString(3)); } }); } //添加記錄 private void addRec() { if (editBook.getText().toString().equals("")) return; helper.insert(editBook.getText().toString(), editAuthor.getText().toString(), editPublisher.getText().toString()); //重新載入數據 cursor.requery(); lvBook.invalidateViews(); editBook.setText(""); editAuthor.setText(""); editPublisher.setText(""); } // 修改記錄 private void editRec() { if (editBook.getText().toString().equals("")) return; helper.update(id, editBook.getText().toString(), editAuthor.getText().toString(), editPublisher.getText().toString()); //重新載入數據 cursor.requery(); lvBook.invalidateViews(); editBook.setText(""); editAuthor.setText(""); editPublisher.setText(""); } //根據書名查詢 private void queryRec() { String et = editBook.getText().toString(); String args[] = new String[]{"%" + et + "%"}; cursor = helper.query(args); SimpleCursorAdapter adapter = new SimpleCursorAdapter( this, R.layout.list, cursor, new String[]{"BookName", "Author", "Publisher"}, new int[]{R.id.textbookname, R.id.textauthor, R.id.textpublisher} ); lvBook.setAdapter(adapter); } //刪除記錄 private void deleteRec() { helper.delete(id); cursor.requery(); lvBook.invalidateViews(); editBook.setText(""); } }
三、配置文件
打開“AndroidManifest.xml”文件。
然後輸入以下代碼:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.yanlei.my" > <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".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> 實際上不需要任何修改
附:
(一)如何刪除Sqlite資料庫
常有人問:如何刪除自己創建的資料庫?
在Activity中,提供有現成的方法:public boolean deleteDatabase (String name)
(二)SimpleCursorAdapter簡要說明
描述:
SimpleCurosrAdapter 是一個將 Cursor 中的 columns 與在 XML 文件中定義的 TextViews 或 ImageViews 進行匹配的簡易 adapter。你可以指定選擇 Cursor 中的哪些 columns、用哪些 views 來顯示這些 columns 、以及指定定義這些 views 的 xml 文件。
也就是說,SimpleCursorAdapter 允許綁定一個 Cursor 的 columns 到 ListView 上,並使用自定義的 layout 顯示 List中的每個項目。
可以使用 SimpleCursorAdapter 作為中間橋梁,將從 sqlite 資料庫中查詢出來的數據直接顯示到 ListView 中。
原型:
public SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
super(context, layout, c);
mTo = to;
mOriginalFrom = from;
findColumns(from);
}
參數:
Context context, 這個與 SimpleListItemFactory 相關的 ListView 所處運行上下文(context)。也就是這個 ListView 所在的 Activity。
int layout, 顯示 list item 的 佈局文件。這個 layout 文件中至少要包含在 "to" 參數中命名的 views。
Cursor c,資料庫的游標( Cursor )。如果 cursor 無效,則該參數可以為 null
String[] from, 指定 column 中的哪些列的數據將綁定(顯示)到 UI 中。如果 cursor 無效, 則該參數可為 null。
int[] to, 指定用於顯示 "from" 參數指定的數據列表的 views。 這些 views 必須都是 TextViews。 "from" 參數的前 N 個值(valus)和 "to" 參數的前 N 個 views 是一一對應的關係。如果 cursor 無效,則該參數可為 null。