在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文件。 输入以下代码:
[html]
view plain
copy
- <?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:text="作者:"
- android:id="@+id/editauthor"
- android:text="出版社:"
- android:id="@+id/editpublisher"
- ListView
- android:id="@+id/listview"
- android:background="@drawable/black"
- </LinearLayout>
2、自定义列表文件
打开res/layout/list.xml文件。 输入以下代码:
copy
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:src="@drawable/list_driver"CheckedTextViewandroid:id="@+id/textauthor"
- android:layout_height="wrap_content"/>
- ImageView
- android:id="@+id/imageView2"
- android:src="@drawable/list_driver"CheckedTextViewandroid:id="@+id/textpublisher"
- android:layout_height="wrap_content" 3、颜色文件
打开res/values/color.xml文件。 输入以下代码:
copy
resources >
- drawablename="black">#000000drawabledrawablename="white">#FFFFFFFFdrawablename="gray">#EFEFEF 4、字符串文件
打开res/values/string.xml文件。 输入以下代码:
copy
string name="app_name">SQLitestringstringname="prompt">书名:(请使用菜单:完成新增、修改、查询、刪除记录)stringname="addrec">新增stringname="editrec">修改stringname="queryrec">查询stringname="delrec">刪除 二、程序文件
1、SQLiteHelper.java文件
打开“src/com.genwoxue.sqlite/SQLiteHelper.java”文件。 然后输入以下代码:
[java]
copy
packagecom.genwoxue.sqlite;
- importandroid.content.ContentValues;
- importandroid.content.Context;
- importandroid.database.Cursor;
- importandroid.database.sqlite.SQLiteDatabase;
- importandroid.database.sqlite.SQLiteOpenHelper;
- publicclassSQLiteHelperextendsSQLiteOpenHelper{
- privatefinalstaticStringDATABASE_NAME="Library";
- staticintDATABASE_VERSION=1;
- staticStringTABLE_NAME="Book";
-
- publicSQLiteHelper(Contextcontext){
- super(context,DATABASE_NAME,null,DATABASE_VERSION);
- }
-
- voidonCreate(SQLiteDatabasedb){
- Stringsql="CREATETABLE"+TABLE_NAME
- +"(_idINTEGERPRIMARYKEY,"
- +"BookNameVARCHAR(30)NOTNULL,"
- +"AuthorVARCHAR(20),248); line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> +"PublisherVARCHAR(30))";
- db.execSQL(sql);
- voidonUpgrade(SQLiteDatabasedb,153); background-color:inherit; font-weight:bold">intoldVersion,153); background-color:inherit; font-weight:bold">intnewVersion){
- Stringsql="DROPTABLEIFEXISTS"+TABLE_NAME;
- onCreate(db);
- }
- //获取游标
- publicCursorselect(){
- SQLiteDatabasedb=this.getReadableDatabase();
- Cursorcursor=db.query(TABLE_NAME,null);
- returncursor;
- //插入一条记录
- longinsert(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,cv);
- returnrow;
- //根据条件查询
- publicCursorquery(String[]args){
- Cursorcursor=db.rawQuery("SELECT*FROM"+TABLE_NAME+"WHEREBookNameLIKE?",args);
- //删除记录
- voiddelete(intid){
- Stringwhere="_id=?";
- String[]whereValue={Integer.toString(id)};
- db.delete(TABLE_NAME,where,whereValue);
- //更新记录
- voidupdate(intid,StringbookName,108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> db.update(TABLE_NAME,cv,108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> }
2、MainActivity.java文件
打开“src/com.genwoxue.sqlite/MainActivity.java”文件。 然后输入以下代码:
copy
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;
- classMainActivityextendsActivity{
- privateSQLiteHelperhelper;
- privateCursorcursor;
- privateListViewlvBook;
- privateEditTexteditBook;
- privateEditTexteditAuthor;
- privateEditTexteditPublisher;
- intid=0;
- protectedintMENU_ADD=Menu.FIRST;
- intMENU_EDIT=Menu.FIRST+1;
- intMENU_QUERY=Menu.FIRST+2;
- intMENU_DELETE=Menu.FIRST+3;
- //执行菜单选项
- booleanonOptionsItemSelected(MenuItemitem)
- {
- super.onOptionsItemSelected(item);
- switch(item.getItemId())
- {
- caseMENU_ADD:
- this.addRec();
- break;
- caseMENU_EDIT:
- this.editRec();
- break;
- caseMENU_QUERY:
- this.queryRec();
- caseMENU_DELETE:
- this.deleteRec();
- returntrue;
- //初始化菜单
- booleanonCreateOptionsMenu(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,R.string.editrec).setIcon(android.R.drawable.ic_menu_edit);
- true;
- voidonCreate(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(){
- voidonItemClick(AdapterView<?>arg0,Viewarg1,153); background-color:inherit; font-weight:bold">intarg2,153); background-color:inherit; font-weight:bold">longarg3){
- cursor.moveToPosition(arg2);
- id=cursor.getInt(0);
- editBook.setText(cursor.getString(1));
- editAuthor.setText(cursor.getString(2));
- editPublisher.setText(cursor.getString(3));
- });
- //添加记录
- voidaddRec()
- 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("");
- //修改记录
- voideditRec()
- helper.update(id,editBook.getText().toString(),0); background-color:inherit">//重新加载数据
- cursor.requery();
- lvBook.invalidateViews();
- editBook.setText("");
- editAuthor.setText("");
- editPublisher.setText("");
- //根据书名查询
- voidqueryRec()
- Stringet=editBook.getText().toString();
- Stringargs[]=newString[]{"%"+et+"%"};
- cursor=helper.query(args);
- SimpleCursorAdapteradapter=newSimpleCursorAdapter(
- R.layout.list,108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> cursor,R.id.textpublisher}
- );
- lvBook.setAdapter(adapter);
- voiddeleteRec()
- helper.delete(id);
- 三、配置文件
打开“AndroidManifest.xml”文件。 然后输入以下代码:
copy
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"
- spanstyle="color:#ff0000;">strong>android:theme="@android:style/Theme">spanintent-filteractionandroid:name="android.intent.action.MAIN"categoryandroid:name="android.intent.category.LAUNCHER"activityapplicationmanifest 注意:在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。 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|