android 本地数据库
在Android平台上,集成了一个嵌入式关系型数据库—SQLite。以SQLite是一款轻型数据库:SQLite3支持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但实际上sqlite3也接受varchar(n)、char(n)、decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型。
SQLite可以解析大部分标准SQL语句。
一、设计界面
1、布局文件
打开res/layout/activity_main.xml文件。
输入以下代码:
- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayoutxmlns: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、自定义列表文件
打开res/layout/list.xml文件。
输入以下代码:
- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <CheckedTextViewandroid: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_driver"/>
- <CheckedTextViewandroid: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_driver"/>
- <CheckedTextViewandroid:id="@+id/textpublisher"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"/>
- </LinearLayout>
3、颜色文件
打开res/values/color.xml文件。
输入以下代码:
- <?xmlversion="1.0"encoding="utf-8"?>
- <resources>
- <drawablename="black">#000000</drawable>
- <drawablename="white">#FFFFFFFF</drawable>
- <drawablename="gray">#EFEFEF</drawable>
- </resources>
4、字符串文件
打开res/values/string.xml文件。
输入以下代码:
- <?xmlversion="1.0"encoding="utf-8"?>
- <resources>
- <stringname="app_name">SQLite</string>
- <stringname="prompt">书名:(请使用菜单:完成新增、修改、查询、刪除记录)</string>
- <stringname="addrec">新增</string>
- <stringname="editrec">修改</string>
- <stringname="queryrec">查询</string>
- <stringname="delrec">刪除</string>
- </resources>
二、程序文件
1、SQLiteHelper.java文件
打开“src/com.genwoxue.sqlite/SQLiteHelper.java”文件。
然后输入以下代码:
- packagecom.genwoxue.sqlite;
- importandroid.content.ContentValues;
- importandroid.content.Context;
- importandroid.database.Cursor;
- importandroid.database.sqlite.SQLiteDatabase;
- importandroid.database.sqlite.SQLiteOpenHelper;
- publicclassSQLiteHelperextendsSQLiteOpenHelper{
- privatefinalstaticStringDATABASE_NAME="Library";
- privatefinalstaticintDATABASE_VERSION=1;
- privatefinalstaticStringTABLE_NAME="Book";
- //构造函数,创建数据库
- publicSQLiteHelper(Contextcontext){
- super(context,DATABASE_NAME,null,DATABASE_VERSION);
- }
- //建表
- publicvoidonCreate(SQLiteDatabasedb){
- Stringsql="CREATETABLE"+TABLE_NAME
- +"(_idINTEGERPRIMARYKEY,"
- +"BookNameVARCHAR(30)NOTNULL,"
- +"AuthorVARCHAR(20),"
- +"PublisherVARCHAR(30))";
- db.execSQL(sql);
- }
- publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){
- Stringsql="DROPTABLEIFEXISTS"+TABLE_NAME;
- db.execSQL(sql);
- onCreate(db);
- }
- //获取游标
- publicCursorselect(){
- SQLiteDatabasedb=this.getReadableDatabase();
- Cursorcursor=db.query(TABLE_NAME,null,null,null,null,null,null);
- returncursor;
- }
- //插入一条记录
- publiclonginsert(StringbookName,Stringauthor,Stringpublisher){
- SQLiteDatabasedb=this.getWritableDatabase();
- ContentValuescv=newContentValues();
- cv.put("BookName",bookName);
- cv.put("Author",author);
- cv.put("Publisher",publisher);
- longrow=db.insert(TABLE_NAME,null,cv);
- returnrow;
- }
- //根据条件查询
- publicCursorquery(String[]args){
- SQLiteDatabasedb=this.getReadableDatabase();
- Cursorcursor=db.rawQuery("SELECT*FROM"+TABLE_NAME+"WHEREBookNameLIKE?",args);
- returncursor;
- }
- //删除记录
- publicvoiddelete(intid){
- SQLiteDatabasedb=this.getWritableDatabase();
- Stringwhere="_id=?";
- String[]whereValue={Integer.toString(id)};
- db.delete(TABLE_NAME,where,whereValue);
- }
- //更新记录
- publicvoidupdate(intid,StringbookName,Stringauthor,Stringpublisher){
- SQLiteDatabasedb=this.getWritableDatabase();
- Stringwhere="_id=?";
- String[]whereValue={Integer.toString(id)};
- ContentValuescv=newContentValues();
- cv.put("BookName",bookName);
- cv.put("Author",author);
- cv.put("Publisher",publisher);
- db.update(TABLE_NAME,cv,where,whereValue);
- }
- }
2、MainActivity.java文件
打开“src/com.genwoxue.sqlite/MainActivity.java”文件。
然后输入以下代码:
- packagecom.genwoxue.sqlite;
- importandroid.app.Activity;
- importandroid.database.Cursor;
- importandroid.os.Bundle;
- importandroid.view.Menu;
- importandroid.view.MenuItem;
- importandroid.view.View;
- importandroid.widget.AdapterView;
- importandroid.widget.EditText;
- importandroid.widget.ListView;
- importandroid.widget.SimpleCursorAdapter;
- publicclassMainActivityextendsActivity{
- privateSQLiteHelperhelper;
- privateCursorcursor;
- privateListViewlvBook;
- privateEditTexteditBook;
- privateEditTexteditAuthor;
- privateEditTexteditPublisher;
- privateintid=0;
- protectedfinalstaticintMENU_ADD=Menu.FIRST;
- protectedfinalstaticintMENU_EDIT=Menu.FIRST+1;
- protectedfinalstaticintMENU_QUERY=Menu.FIRST+2;
- protectedfinalstaticintMENU_DELETE=Menu.FIRST+3;
- //执行菜单选项
- publicbooleanonOptionsItemSelected(MenuItemitem)
- {
- super.onOptionsItemSelected(item);
- switch(item.getItemId())
- {
- caseMENU_ADD:
- this.addRec();
- break;
- caseMENU_EDIT:
- this.editRec();
- break;
- caseMENU_QUERY:
- this.queryRec();
- break;
- caseMENU_DELETE:
- this.deleteRec();
- break;
- }
- returntrue;
- }
- //初始化菜单
- publicbooleanonCreateOptionsMenu(Menumenu)
- {
- 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);
- returntrue;
- }
- publicvoidonCreate(BundlesavedInstanceState)
- {
- 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=newSQLiteHelper(this);
- cursor=helper.select();
- SimpleCursorAdapteradapter=newSimpleCursorAdapter(
- this,
- R.layout.list,
- cursor,
- newString[]{"BookName","Author","Publisher"},
- newint[]{R.id.textbookname,R.id.textauthor,R.id.textpublisher}
- );
- lvBook.setAdapter(adapter);
- //lvBook设置OnItemClickListener监听事件
- lvBook.setOnItemClickListener(newAdapterView.OnItemClickListener(){
- publicvoidonItemClick(AdapterView<?>arg0,Viewarg1,intarg2,longarg3){
- 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));
- }
- });
- }
- //添加记录
- privatevoidaddRec()
- {
- 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("");
- }
- //修改记录
- privatevoideditRec()
- {
- 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("");
- }
- //根据书名查询
- privatevoidqueryRec()
- {
- Stringet=editBook.getText().toString();
- Stringargs[]=newString[]{"%"+et+"%"};
- cursor=helper.query(args);
- SimpleCursorAdapteradapter=newSimpleCursorAdapter(
- this,
- R.layout.list,
- cursor,
- newString[]{"BookName","Author","Publisher"},
- newint[]{R.id.textbookname,R.id.textauthor,R.id.textpublisher}
- );
- lvBook.setAdapter(adapter);
- }
- //删除记录
- privatevoiddeleteRec()
- {
- helper.delete(id);
- cursor.requery();
- lvBook.invalidateViews();
- editBook.setText("");
- }
- }
三、配置文件
打开“AndroidManifest.xml”文件。
然后输入以下代码:
- <?xmlversion="1.0"encoding="utf-8"?>
- <manifestxmlns:android="http://schemas.android.com/apk/res/android"
- package="com.genwoxue.sqlite"
- android:versionCode="1"
- android:versionName="1.0">
- <uses-sdk
- android:minSdkVersion="8"
- android:targetSdkVersion="15"/>
- <application
- android:allowBackup="true"
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:theme="@style/AppTheme">
- <activity
- android:name="com.genwoxue.sqlite.MainActivity"
- android:label="@string/app_name"
- android:theme="@android:style/Theme">
- <intent-filter>
- <actionandroid:name="android.intent.action.MAIN"/>
- <categoryandroid:name="android.intent.category.LAUNCHER"/>
- </intent-filter>
- </activity>
- </application>
- </manifest>
注意:在Android4.0中,如果想显示2.3版本中样式的菜单,需要在配置文件中填加以上红色代码。
四、运行结果
说明:输入内容,单击“新增”菜单,则添加一条记录;也可以根据书名查询相应书籍;也可以选中某条记录,然后单击“修改”或“删除”菜单。
附:
(一)如何删除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。
更多相关文章
- 基于 Android(安卓)NDK 进行 OpenGL ES开发
- Android第一步
- Android(安卓)简单项目
- 开发人员应该了解的 Android(安卓)常用术语
- Fragment的添加方法总结
- android 项目工程文件夹(zhuan)
- Android(安卓)Init进程源码分析
- Android(安卓)如何在代码中动态的添加View 及 指定位置
- 离线下载android sdk