`
atgoingguoat
  • 浏览: 192434 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

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文件。
  输入以下代码:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2.    
  3.  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     android:orientation="vertical"  
  5.      android:layout_width="match_parent"  
  6.      android:layout_height="match_parent"  
  7.      android:background="#EFEFEF">  
  8.   
  9.     <TextView    
  10.         android:layout_width="fill_parent"   
  11.         android:layout_height="wrap_content"   
  12.         android:text="@string/prompt"  
  13.         android:textColor="@drawable/black" />  
  14.        
  15.      <EditText    
  16.         android:id="@+id/editbook"   
  17.         android:layout_width="fill_parent"   
  18.         android:layout_height="wrap_content"   
  19.         android:textColor="@drawable/black" />  
  20.     
  21.      <TextView    
  22.         android:layout_width="fill_parent"   
  23.         android:layout_height="wrap_content"   
  24.         android:text="作者:"  
  25.         android:textColor="@drawable/black" />  
  26.        
  27.     <EditText    
  28.          android:id="@+id/editauthor"   
  29.          android:layout_width="fill_parent"   
  30.          android:layout_height="wrap_content"   
  31.          android:textColor="@drawable/black" />  
  32.     
  33.      <TextView    
  34.          android:layout_width="fill_parent"   
  35.          android:layout_height="wrap_content"   
  36.          android:text="出版社:"  
  37.          android:textColor="@drawable/black" />  
  38.        
  39.     <EditText    
  40.         android:id="@+id/editpublisher"   
  41.         android:layout_width="fill_parent"   
  42.         android:layout_height="wrap_content"   
  43.         android:textColor="@drawable/black" />  
  44.    
  45.     <ListView  
  46.         android:id="@+id/listview"  
  47.         android:layout_width="fill_parent"  
  48.         android:layout_height="wrap_content"  
  49.         android:background="@drawable/black" />  
  50.   
  51.   
  52. </LinearLayout>  

 2、自定义列表文件

  打开res/layout/list.xml文件。
  输入以下代码:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2.    
  3. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  4.   android:layout_width="match_parent"  
  5.   android:layout_height="match_parent">  
  6.    
  7.   <CheckedTextView android:id="@+id/textbookname"  
  8.       android:layout_width="wrap_content"  
  9.       android:layout_height="wrap_content" />  
  10.   
  11.   <ImageView  
  12.       android:id="@+id/imageView1"  
  13.       android:layout_width="wrap_content"  
  14.       android:layout_height="wrap_content"  
  15.       android:src="@drawable/list_driver" />  
  16.    
  17.      
  18.    <CheckedTextView android:id="@+id/textauthor"  
  19.       android:layout_width="wrap_content"  
  20.       android:layout_height="wrap_content"/>  
  21.    
  22.    <ImageView  
  23.       android:id="@+id/imageView2"  
  24.       android:layout_width="wrap_content"  
  25.       android:layout_height="wrap_content"  
  26.       android:src="@drawable/list_driver" />  
  27.   
  28.    <CheckedTextView android:id="@+id/textpublisher"  
  29.       android:layout_width="wrap_content"  
  30.       android:layout_height="wrap_content" />  
  31.    
  32. </LinearLayout>  

  3、颜色文件

  打开res/values/color.xml文件。
  输入以下代码:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.   <drawable name="black">#000000</drawable>  
  4.   <drawable name="white">#FFFFFFFF</drawable>  
  5.   <drawable name="gray">#EFEFEF</drawable>  
  6. </resources>  

  4、字符串文件

  打开res/values/string.xml文件。
  输入以下代码:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.   
  4.     <string name="app_name">SQLite</string>  
  5.     <string name="prompt">书名:(请使用菜单:完成新增、修改、查询、刪除记录)</string>  
  6.     <string name="addrec">新增</string>  
  7.     <string name="editrec">修改</string>  
  8.     <string name="queryrec">查询</string>  
  9.     <string name="delrec">刪除</string>  
  10.   
  11. </resources>  

二、程序文件

  1、SQLiteHelper.java文件

  打开“src/com.genwoxue.sqlite/SQLiteHelper.java”文件。
  然后输入以下代码:

  1. package com.genwoxue.sqlite;  
  2.   
  3. import android.content.ContentValues;  
  4. import android.content.Context;  
  5. import android.database.Cursor;  
  6. import android.database.sqlite.SQLiteDatabase;  
  7. import android.database.sqlite.SQLiteOpenHelper;  
  8.    
  9. public class SQLiteHelper extends SQLiteOpenHelper {  
  10.   
  11.        private final static String DATABASE_NAME = "Library";  
  12.        private final static int DATABASE_VERSION = 1;  
  13.        private final static String TABLE_NAME = "Book";  
  14.    
  15.        //构造函数,创建数据库  
  16.        public SQLiteHelper(Context context) {  
  17.               super(context, DATABASE_NAME, null, DATABASE_VERSION);  
  18.        }  
  19.    
  20.        //建表  
  21.        public void onCreate(SQLiteDatabase db) {  
  22.               String sql = "CREATE TABLE " + TABLE_NAME   
  23.                       + "(_id INTEGER PRIMARY KEY,"   
  24.                       + " BookName VARCHAR(30)  NOT NULL,"   
  25.                       + " Author VARCHAR(20),"  
  26.                       + " Publisher VARCHAR(30))";  
  27.               db.execSQL(sql);  
  28.        }  
  29.    
  30.    
  31.        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
  32.               String sql = "DROP TABLE IF EXISTS " + TABLE_NAME;  
  33.               db.execSQL(sql);  
  34.               onCreate(db);  
  35.        }  
  36.    
  37.        //获取游标  
  38.        public Cursor select() {  
  39.               SQLiteDatabase db = this.getReadableDatabase();  
  40.               Cursor cursor = db.query(TABLE_NAME, nullnullnullnullnullnull);  
  41.               return cursor;  
  42.        }  
  43.    
  44.        //插入一条记录  
  45.        public long insert(String bookName,String author,String publisher ) {  
  46.               SQLiteDatabase db = this.getWritableDatabase();  
  47.               ContentValues cv = new ContentValues();  
  48.               cv.put("BookName", bookName);  
  49.               cv.put("Author", author);  
  50.               cv.put("Publisher", publisher);  
  51.               long row = db.insert(TABLE_NAME, null, cv);  
  52.               return row;  
  53.        }  
  54.          
  55.        //根据条件查询  
  56.        public Cursor query(String[] args) {  
  57.            SQLiteDatabase db = this.getReadableDatabase();  
  58.            Cursor cursor = db.rawQuery("SELECT * FROM "+TABLE_NAME+" WHERE BookName LIKE ?", args);  
  59.            return cursor;  
  60.        }  
  61.    
  62.        //删除记录  
  63.        public void delete(int id) {  
  64.               SQLiteDatabase db = this.getWritableDatabase();  
  65.               String where ="_id = ?";  
  66.               String[] whereValue = { Integer.toString(id) };  
  67.               db.delete(TABLE_NAME, where, whereValue);  
  68.        }  
  69.    
  70.        //更新记录  
  71.        public void update(int id, String bookName,String author,String publisher) {  
  72.               SQLiteDatabase db = this.getWritableDatabase();  
  73.               String where = "_id = ?";  
  74.               String[] whereValue = { Integer.toString(id) };  
  75.               ContentValues cv = new ContentValues();  
  76.               cv.put("BookName", bookName);  
  77.               cv.put("Author", author);  
  78.               cv.put("Publisher", publisher);  
  79.               db.update(TABLE_NAME, cv, where, whereValue);  
  80.        }  
  81. }  

  2、MainActivity.java文件

  打开“src/com.genwoxue.sqlite/MainActivity.java”文件。
  然后输入以下代码:

  1. package com.genwoxue.sqlite;  
  2.   
  3. import android.app.Activity;  
  4. import android.database.Cursor;  
  5. import android.os.Bundle;  
  6. import android.view.Menu;  
  7. import android.view.MenuItem;  
  8. import android.view.View;  
  9. import android.widget.AdapterView;  
  10. import android.widget.EditText;  
  11. import android.widget.ListView;  
  12. import android.widget.SimpleCursorAdapter;  
  13.   
  14. public class MainActivity extends Activity {  
  15.     private SQLiteHelper helper;  
  16.     private Cursor cursor;  
  17.     private ListView lvBook;  
  18.     private EditText editBook;  
  19.     private EditText editAuthor;  
  20.     private EditText editPublisher;  
  21.       
  22.     private int id=0;  
  23.       
  24.     protected final static int MENU_ADD = Menu.FIRST;  
  25.     protected final static int MENU_EDIT = Menu.FIRST + 1;  
  26.     protected final static int MENU_QUERY = Menu.FIRST + 2;  
  27.     protected final static int MENU_DELETE = Menu.FIRST + 3;  
  28.   
  29.     //执行菜单选项  
  30.     public boolean onOptionsItemSelected(MenuItem item)  
  31.     {  
  32.       super.onOptionsItemSelected(item);  
  33.       switch (item.getItemId())  
  34.       {  
  35.         case MENU_ADD:  
  36.           this.addRec();  
  37.           break;  
  38.         case MENU_EDIT:  
  39.           this.editRec();  
  40.           break;  
  41.         case MENU_QUERY:  
  42.             this.queryRec();  
  43.             break;  
  44.         case MENU_DELETE:  
  45.           this.deleteRec();  
  46.           break;  
  47.       }  
  48.       return true;  
  49.     }  
  50.   
  51.     //初始化菜单  
  52.     public boolean onCreateOptionsMenu(Menu menu)  
  53.     {  
  54.       super.onCreateOptionsMenu(menu);  
  55.       menu.add(Menu.NONE, MENU_ADD, 0, R.string.addrec).setIcon(android.R.drawable.ic_menu_add);  
  56.       menu.add(Menu.NONE, MENU_EDIT, 0, R.string.editrec).setIcon(android.R.drawable.ic_menu_edit);  
  57.       menu.add(Menu.NONE,MENU_QUERY,0,R.string.queryrec).setIcon(android.R.drawable.ic_menu_search);  
  58.       menu.add(Menu.NONE, MENU_DELETE, 0, R.string.delrec).setIcon(android.R.drawable.ic_menu_delete);  
  59.       return true;  
  60.     }  
  61.   
  62.   
  63.   
  64.     public void onCreate(Bundle savedInstanceState)  
  65.     {  
  66.       super.onCreate(savedInstanceState);  
  67.       setContentView(R.layout.activity_main);  
  68.         
  69.       lvBook = (ListView) this.findViewById(R.id.listview);  
  70.       editBook = (EditText) this.findViewById(R.id.editbook);  
  71.       editAuthor=(EditText) this.findViewById(R.id.editauthor);  
  72.       editPublisher=(EditText) this.findViewById(R.id.editpublisher);  
  73.         
  74.       //表中内容填充到自定义ListView  
  75.       helper = new SQLiteHelper(this);  
  76.       cursor = helper.select();  
  77.       SimpleCursorAdapter adapter = new SimpleCursorAdapter(  
  78.               this,   
  79.               R.layout.list,   
  80.               cursor,   
  81.               new String[] {"BookName","Author","Publisher"},   
  82.               new int[] { R.id.textbookname,R.id.textauthor,R.id.textpublisher}  
  83.               );  
  84.       lvBook.setAdapter(adapter);  
  85.   
  86.       // lvBook设置OnItemClickListener监听事件   
  87.       lvBook.setOnItemClickListener(new AdapterView.OnItemClickListener(){  
  88.           public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3){  
  89.               cursor.moveToPosition(arg2);          // 将cursor移到所点击的值   
  90.               id = cursor.getInt(0);                // 取得字段_id的值   
  91.               editBook.setText(cursor.getString(1));    // 取得字段Rec_text的值   
  92.               editAuthor.setText(cursor.getString(2));  
  93.               editPublisher.setText(cursor.getString(3));  
  94.           }  
  95.       });  
  96.   
  97.     }  
  98.   
  99.     //添加记录  
  100.     private void addRec()  
  101.     {  
  102.       if (editBook.getText().toString().equals(""))  
  103.           return;  
  104.       helper.insert(editBook.getText().toString(),editAuthor.getText().toString(),editPublisher.getText().toString());    
  105.       //重新加载数据  
  106.       cursor.requery();  
  107.       lvBook.invalidateViews();  
  108.       editBook.setText("");  
  109.       editAuthor.setText("");  
  110.       editPublisher.setText("");  
  111.     }  
  112.   
  113.     // 修改记录  
  114.     private void editRec()  
  115.     {  
  116.       if (editBook.getText().toString().equals(""))  
  117.         return;  
  118.       helper.update(id, editBook.getText().toString(),editAuthor.getText().toString(),editPublisher.getText().toString());  
  119.         
  120.       //重新加载数据  
  121.       cursor.requery();  
  122.       lvBook.invalidateViews();  
  123.       editBook.setText("");  
  124.       editAuthor.setText("");  
  125.       editPublisher.setText("");  
  126.     }  
  127.   
  128.     //根据书名查询  
  129.     private void queryRec()  
  130.     {  
  131.       String et=editBook.getText().toString();  
  132.       String args[]=new String[]{"%"+et+"%"};  
  133.       cursor=helper.query(args);  
  134.       SimpleCursorAdapter adapter = new SimpleCursorAdapter(  
  135.               this,   
  136.               R.layout.list,   
  137.               cursor,   
  138.               new String[] {"BookName","Author","Publisher"},   
  139.               new int[] { R.id.textbookname,R.id.textauthor,R.id.textpublisher}  
  140.               );  
  141.       lvBook.setAdapter(adapter);  
  142.     }  
  143.       
  144.     //删除记录  
  145.     private void deleteRec()  
  146.     {  
  147.       helper.delete(id);  
  148.       cursor.requery();  
  149.       lvBook.invalidateViews();  
  150.       editBook.setText("");  
  151.  }  
  152.   
  153. }  

三、配置文件

  打开“AndroidManifest.xml”文件。
  然后输入以下代码:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="com.genwoxue.sqlite"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0" >  
  6.   
  7.     <uses-sdk  
  8.         android:minSdkVersion="8"  
  9.         android:targetSdkVersion="15" />  
  10.   
  11.     <application  
  12.         android:allowBackup="true"  
  13.         android:icon="@drawable/ic_launcher"  
  14.         android:label="@string/app_name"  
  15.         android:theme="@style/AppTheme" >  
  16.         <activity  
  17.             android:name="com.genwoxue.sqlite.MainActivity"  
  18.             android:label="@string/app_name"  
  19.             android:theme="@android:style/Theme" >  
  20.             <intent-filter>  
  21.                 <action android:name="android.intent.action.MAIN" />  
  22.                 <category android:name="android.intent.category.LAUNCHER" />  
  23.             </intent-filter>  
  24.         </activity>  
  25.     </application>  
  26.   
  27. </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本地数据库增删改查之菜单实现

    这是一个完整的Android本地(离线)数据库的增删改查操作,基于Wei-Meng Lee的代码修改而成,原先数据库被修改,以适应当前项目──菜单。本代码由本人和宋倩楠共同完成,是Android课程的一个小作业。为了您和他人着想...

    Android本地数据库导出Execl

    在Android应用开发中,数据存储是一项重要的任务,而Android本地数据库是常见的数据存储方式之一。SQLite作为Android系统内置的关系型数据库,提供了结构化数据的存储和管理。在某些场景下,我们可能需要将SQLite...

    Android 本地数据库日记本

    这个“Android本地数据库日记本”项目就是这样一个实例,它利用了SQLite数据库来存储用户的日记和笔记内容。下面我们将深入探讨相关的知识点。 首先,SQLite是一个轻量级的数据库系统,它是Android系统内置的,无需...

    公交查询系统,SQLite,android本地数据库

    Android本地数据库主要用于存储应用运行时需要持久化的数据,如用户设置、应用程序状态、本地化内容等。SQLite作为Android的默认本地数据库解决方案,具有以下优势: 1. **性能高效**:SQLite数据库存储在文件系统...

    Android手机号码归属地查询(本地数据库)

    1. **Android本地数据库**: Android系统支持SQLite数据库,它是一个轻量级的关系型数据库,适用于移动设备存储数据。在这个Demo中,手机号码和归属地信息被存储在SQLite数据库中,以便快速查询。数据库通常位于`/...

    android 数据库表结构更新步骤

    - Android使用SQLite作为默认的本地数据库系统。首先,我们需要创建一个`SQLiteOpenHelper`的子类,这是管理数据库版本和结构的关键类。 - 在这个子类中,我们需要重写`onCreate()`方法来创建初始的数据库表,以及...

    android sqlite android本地数据库增删查改 经典例子

    SQLite为Android应用提供了本地数据库支持,使得开发者能够在设备上进行数据的持久化。下面将详细讲解如何在Android中使用SQLite进行数据的增、删、查、改操作。 首先,我们需要创建一个SQLite数据库。在Android中...

    本地数据库基本语句操作

    在Eclipse这样的集成开发环境中进行本地数据库的基本语句操作,是每个Android开发者必备的技能。本篇文章将详细探讨SQLite数据库在Android开发中的使用,以及如何在Eclipse中执行SQL语句。 首先,SQLite是Android...

    android本地读取数据库db文件查询本地归属地

    在Android开发中,有时我们需要对本地...以上就是"android本地读取数据库db文件查询本地归属地"项目所涵盖的关键技术点。理解并掌握这些知识点,可以帮助开发者在实际项目中实现类似功能,提供高效的本地数据查询服务。

    android ListView三级联选地区本地数据库sqlite,选中item保持颜色不变

    本应用是查询android本地数据库sqlite全国省、市、地数据库,绑定到listview,因为在网上找了好久都没相关的demo,自己感觉不是很欣赏那些所谓的大牛的作为,懂了的技术就不分享技术,所以自己自给自足做了个基于...

    Android使用JDBC连接本地数据库

    在Android开发中,通常我们使用SQLite作为本地数据库来存储应用数据。然而,有时可能需要与非SQLite数据库(如MySQL或PostgreSQL)进行交互,这时可以借助JDBC(Java Database Connectivity)来实现。JDBC是Java中...

    android连接本地mysql数据库实现增删查改-毕业设计项目

    在Android应用开发中,连接并操作本地MySQL数据库是一项常见的需求,尤其是在进行复杂的业务逻辑或需要持久化存储数据的毕业设计项目中。本项目主要展示了如何使用Android与MySQL数据库交互,实现资源的添加、删除、...

    Android代码-选择城市列表配本地数据库可以直接应用到项目.zip

    这个项目对于初学者或者想要学习Android本地数据库操作和UI设计的开发者来说是一个很好的实践案例。通过这个项目,可以学习到如何在Android应用中集成数据库,处理数据,以及如何创建交互式的用户界面。同时,也可以...

    Android数据库框架-----ORMLite 的基本用法

    **Android数据库框架——ORMLite的基本用法** 在Android应用开发中,数据库是不可或缺的一部分,用于持久化数据。ORMLite(Object Relational Mapping Lite)是一个轻量级的ORM框架,它简化了Android应用程序与...

    Android聊天Demo实现(数据库+RecyclerView)

    本项目"Android聊天Demo实现(数据库+RecyclerView)"就是一个很好的示例,它利用了GreenDao作为持久化层,RecyclerView来展示聊天记录,以及ButterKnife进行视图绑定。下面我们将详细探讨这些技术。 1. **GreenDao**...

    本地数据库储存

    本地数据库储存是指在用户的设备上,如个人计算机或移动设备(如MobilePhone)上存储数据的一种方式。这种方式允许用户离线访问数据,提高数据处理速度,并且保护数据隐私,因为数据不必总是通过网络传输。下面将...

    android SQLite数据库管理软件

    SQLite是一款轻量级的数据库管理系统,它被广泛应用于Android应用程序中,因为它不需要独立的服务进程,而是内嵌在应用中,提供了高效、可靠的本地数据存储功能。"android SQLite数据库管理软件"是一个专为Android...

    Android SQLite数据库操作Demo

    SQLite数据库的优势在于它不需要单独的服务进程,而是直接嵌入到应用程序中,提供了高效的本地数据存储解决方案。在这个"Android SQLite数据库操作Demo"中,我们将探讨如何在Android应用中创建、查询、更新和删除...

    Android实现登陆注册连接数据库操作完整代码

    - Android内置了SQLite数据库,用于本地数据存储。在这个项目中,SQLite用于存储用户的注册信息,如用户名、密码等。开发者可能创建了一个或多个表来保存这些数据,并实现了插入、查询和更新数据的方法。 4. **...

    Android Sqlite数据库demo

    总的来说,Android的SQLite数据库提供了一种高效、可靠的方式来处理本地数据存储。通过学习和理解如何创建、操作和查询SQLite数据库,开发者可以为用户提供更丰富的本地化功能,如离线模式、数据备份和恢复等。在...

Global site tag (gtag.js) - Google Analytics