Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android提高第八篇之SQLite分頁讀取

Android提高第八篇之SQLite分頁讀取

編輯:Android開發實例

      Android包含了常用於嵌入式系統的SQLite,免去了開發者自己移植安裝的功夫。SQLite 支持多數 SQL92 標准,很多常用的SQL命令都能在SQLite上面使用,除此之外Android還提供了一系列自定義的方法去簡化對SQLite數據庫的操作。不過有跨平台需求的程序就建議使用標准的SQL語句,畢竟這樣容易在多個平台之間移植。

先貼出本文程序運行的結果:

本文主要講解了SQLite的基本用法,如:創建數據庫,使用SQL命令查詢數據表、插入數據,關閉數據庫,以及使用GridView實現了一個分頁欄(關於GridView的用法),用於把數據分頁顯示。

分頁欄的pagebuttons.xml的源碼如下:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:layout_height="wrap_content" android:paddingBottom="4dip" 
  4.     android:layout_width="fill_parent"> 
  5.     <TextView android:layout_width="wrap_content" 
  6.         android:layout_below="@+id/ItemImage" android:layout_height="wrap_content" 
  7.         android:text="TextView01" android:layout_centerHorizontal="true" 
  8.         android:id="@+id/ItemText"> 
  9.     </TextView> 
  10. </RelativeLayout>   

 

 

 

main.xml的源碼如下:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:orientation="vertical" android:layout_width="fill_parent" 
  4.     android:layout_height="fill_parent"> 
  5.     <Button android:layout_height="wrap_content" 
  6.         android:layout_width="fill_parent" android:id="@+id/btnCreateDB" 
  7.         android:text="創建數據庫"></Button> 
  8.     <Button android:layout_height="wrap_content" 
  9.         android:layout_width="fill_parent" android:text="插入一串實驗數據" android:id="@+id/btnInsertRec"></Button> 
  10.     <Button android:layout_height="wrap_content" android:id="@+id/btnClose" 
  11.         android:text="關閉數據庫" android:layout_width="fill_parent"></Button> 
  12.     <EditText android:text="@+id/EditText01" android:id="@+id/EditText01" 
  13.         android:layout_width="fill_parent" android:layout_height="256dip"></EditText> 
  14.     <GridView android:id="@+id/gridview" android:layout_width="fill_parent" 
  15.         android:layout_height="32dip" android:numColumns="auto_fit" 
  16.         android:columnWidth="40dip"></GridView> 
  17. </LinearLayout> 

 

 

 

本文程序源碼如下:

 

  1. package com.testSQLite;       
  2.        
  3. import java.util.ArrayList;       
  4. import java.util.HashMap;       
  5. import android.app.Activity;       
  6. import android.database.Cursor;       
  7. import android.database.SQLException;       
  8. import android.database.sqlite.SQLiteDatabase;       
  9. import android.os.Bundle;       
  10. import android.util.Log;       
  11. import android.view.View;       
  12. import android.widget.AdapterView;       
  13. import android.widget.AdapterView.OnItemClickListener;       
  14. import android.widget.Button;       
  15. import android.widget.EditText;       
  16. import android.widget.GridView;       
  17. import android.widget.SimpleAdapter;       
  18.        
  19. public class testSQLite extends Activity {       
  20.     /** Called when the activity is first created. */       
  21.     Button btnCreateDB, btnInsert, btnClose;       
  22.     EditText edtSQL;//顯示分頁數據       
  23.     SQLiteDatabase db;       
  24.     int id;//添加記錄時的id累加標記,必須全局       
  25.     static final int PageSize=10;//分頁時,每頁的數據總數       
  26.     private static final String TABLE_NAME = "stu";       
  27.     private static final String ID = "id";       
  28.     private static final String NAME = "name";       
  29.            
  30.     SimpleAdapter saPageID;// 分頁欄適配器       
  31.     ArrayList<HashMap<String, String>> lstPageID;// 分頁欄的數據源,與PageSize和數據總數相關       
  32.        
  33.     @Override       
  34.     public void onCreate(Bundle savedInstanceState) {       
  35.         super.onCreate(savedInstanceState);       
  36.         setContentView(R.layout.main);       
  37.         btnCreateDB = (Button) this.findViewById(R.id.btnCreateDB);       
  38.         btnCreateDB.setOnClickListener(new ClickEvent());       
  39.        
  40.         btnInsert = (Button) this.findViewById(R.id.btnInsertRec);       
  41.         btnInsert.setOnClickListener(new ClickEvent());       
  42.        
  43.         btnClose = (Button) this.findViewById(R.id.btnClose);       
  44.         btnClose.setOnClickListener(new ClickEvent());       
  45.                
  46.         edtSQL=(EditText)this.findViewById(R.id.EditText01);       
  47.                
  48.         GridView gridview = (GridView) findViewById(R.id.gridview);//分頁欄控件       
  49.         // 生成動態數組,並且轉入數據       
  50.         lstPageID = new ArrayList<HashMap<String, String>>();       
  51.        
  52.         // 生成適配器的ImageItem <====> 動態數組的元素,兩者一一對應       
  53.         saPageID = new SimpleAdapter(testSQLite.this, // 沒什麼解釋       
  54.                 lstPageID,// 數據來源       
  55.                 R.layout.pagebuttons,//XML實現       
  56.                 new String[] { "ItemText" },       
  57.                 new int[] { R.id.ItemText });       
  58.        
  59.         // 添加並且顯示       
  60.         gridview.setAdapter(saPageID);       
  61.         // 添加消息處理       
  62.         gridview.setOnItemClickListener(new OnItemClickListener(){       
  63.        
  64.             @Override       
  65.             public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,       
  66.                     long arg3) {       
  67.                 LoadPage(arg2);//根據所選分頁讀取對應的數據       
  68.             }       
  69.         });       
  70.        
  71.     }       
  72.        
  73.            
  74.     class ClickEvent implements View.OnClickListener {       
  75.        
  76.         @Override       
  77.         public void onClick(View v) {       
  78.             if (v == btnCreateDB) {       
  79.                 CreateDB();       
  80.             } else if (v == btnInsert) {       
  81.                 InsertRecord(16);//插入16條記錄       
  82.                 RefreshPage();       
  83.             }else if (v == btnClose) {       
  84.                 db.close();       
  85.             }       
  86.         }       
  87.        
  88.     }       
  89.            
  90.        
  91.     /*     
  92.      * 讀取指定ID的分頁數據     
  93.      * SQL:Select * From TABLE_NAME Limit 9 Offset 10;     
  94.      * 表示從TABLE_NAME表獲取數據,跳過10行,取9行     
  95.      */       
  96.     void LoadPage(int pageID)       
  97.     {       
  98.         String sql= "select * from " + TABLE_NAME +        
  99.         " Limit "+String.valueOf(PageSize)+ " Offset " +String.valueOf(pageID*PageSize);       
  100.         Cursor rec = db.rawQuery(sql, null);       
  101.        
  102.         setTitle("當前分頁的數據總數:"+String.valueOf(rec.getCount()));       
  103.                
  104.         // 取得字段名稱       
  105.         String title = "";       
  106.         int colCount = rec.getColumnCount();       
  107.         for (int i = 0; i < colCount; i++)       
  108.             title = title + rec.getColumnName(i) + "     ";       
  109.        
  110.                
  111.         // 列舉出所有數據       
  112.         String content="";       
  113.         int recCount=rec.getCount();       
  114.         for (int i = 0; i < recCount; i++) {//定位到一條數據       
  115.             rec.moveToPosition(i);       
  116.             for(int ii=0;ii<colCount;ii++)//定位到一條數據中的每個字段       
  117.             {       
  118.                 content=content+rec.getString(ii)+"     ";       
  119.             }       
  120.             content=content+"\r\n";       
  121.         }       
  122.                
  123.         edtSQL.setText(title+"\r\n"+content);//顯示出來       
  124.         rec.close();       
  125.     }       
  126.            
  127.     /*     
  128.      * 在內存創建數據庫和數據表     
  129.      */       
  130.     void CreateDB() {       
  131.         // 在內存創建數據庫       
  132.         db = SQLiteDatabase.create(null);       
  133.         Log.e("DB Path", db.getPath());       
  134.         String amount = String.valueOf(databaseList().length);       
  135.         Log.e("DB amount", amount);       
  136.         // 創建數據表       
  137.         String sql = "CREATE TABLE " + TABLE_NAME + " (" + ID       
  138.                 + " text not null, " + NAME + " text not null " + ");";       
  139.         try {       
  140.             db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);       
  141.             db.execSQL(sql);       
  142.         } catch (SQLException e) {}       
  143.     }       
  144.        
  145.     /*     
  146.      * 插入N條數據     
  147.      */       
  148.     void InsertRecord(int n) {       
  149.         int total = id + n;       
  150.         for (; id < total; id++) {       
  151.             String sql = "insert into " + TABLE_NAME + " (" + ID + ", " + NAME       
  152.                     + ") values('" + String.valueOf(id) + "', 'test');";       
  153.             try {       
  154.                 db.execSQL(sql);       
  155.             } catch (SQLException e) {       
  156.             }       
  157.         }       
  158.     }       
  159.        
  160.     /*     
  161.      * 插入之後刷新分頁     
  162.      */       
  163.     void RefreshPage()       
  164.     {       
  165.         String sql = "select count(*) from " + TABLE_NAME;       
  166.         Cursor rec = db.rawQuery(sql, null);       
  167.         rec.moveToLast();       
  168.         long recSize=rec.getLong(0);//取得總數       
  169.         rec.close();       
  170.         int pageNum=(int)(recSize/PageSize) + 1;//取得分頁數       
  171.                
  172.         lstPageID.clear();       
  173.         for (int i = 0; i < pageNum; i++) {       
  174.             HashMap<String, String> map = new HashMap<String, String>();       
  175.             map.put("ItemText", "No." + String.valueOf(i));     
  176.        
  177.             lstPageID.add(map);       
  178.         }       
  179.         saPageID.notifyDataSetChanged();       
  180.     }       
  181. }    

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved