21天学习android开发教程之SQLite分页读取
Android包含了常用于嵌入式系统的SQLite,免去了开发者自己移植安装的功夫。SQLite支持多数SQL92标准,很多常用的SQL命令都能在SQLite上面使用,除此之外Android还提供了一系列自定义的方法去简化对SQLite数据库的操作。不过有跨平台需求的程序就建议使用标准的SQL语句,毕竟这样容易在多个平台之间移植。
本文主要讲解了SQLite的基本用法,如:创建数据库,使用SQL命令查询数据表、插入数据,关闭数据库,以及使用GridView实现了一个分页栏(关于GridView的用法),用于把数据分页显示。
分页栏的pagebuttons.xml的源码如下:
<?xmlversion="1.0"encoding="utf-8"?> <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content"android:paddingBottom="4dip" android:layout_width="fill_parent"> <TextViewandroid:layout_width="wrap_content" android:layout_below="@+id/ItemImage"android:layout_height="wrap_content" android:text="TextView01"android:layout_centerHorizontal="true" android:id="@+id/ItemText"> </TextView> </RelativeLayout>
main.xml的源码如下:
<?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"android:layout_width="fill_parent" android:layout_height="fill_parent"> <Buttonandroid:layout_height="wrap_content" android:layout_width="fill_parent"android:id="@+id/btnCreateDB" android:text="创建数据库"></Button> <Buttonandroid:layout_height="wrap_content" android:layout_width="fill_parent"android:text="插入一串实验数据"android:id="@+id/btnInsertRec"></Button> <Buttonandroid:layout_height="wrap_content"android:id="@+id/btnClose" android:text="关闭数据库"android:layout_width="fill_parent"></Button> <EditTextandroid:text="@+id/EditText01"android:id="@+id/EditText01" android:layout_width="fill_parent"android:layout_height="256dip"></EditText> <GridViewandroid:id="@+id/gridview"android:layout_width="fill_parent" android:layout_height="32dip"android:numColumns="auto_fit" android:columnWidth="40dip"></GridView> </LinearLayout>
本文程序源码如下:
packagecom.testSQLite; importjava.util.ArrayList; importjava.util.HashMap; importandroid.app.Activity; importandroid.database.Cursor; importandroid.database.SQLException; importandroid.database.sqlite.SQLiteDatabase; importandroid.os.Bundle; importandroid.util.Log; importandroid.view.View; importandroid.widget.AdapterView; importandroid.widget.AdapterView.OnItemClickListener; importandroid.widget.Button; importandroid.widget.EditText; importandroid.widget.GridView; importandroid.widget.SimpleAdapter; publicclasstestSQLiteextendsActivity{ /**Calledwhentheactivityisfirstcreated.*/ ButtonbtnCreateDB,btnInsert,btnClose; EditTextedtSQL;//显示分页数据 SQLiteDatabasedb; intid;//添加记录时的id累加标记,必须全局 staticfinalintPageSize=10;//分页时,每页的数据总数 privatestaticfinalStringTABLE_NAME="stu"; privatestaticfinalStringID="id"; privatestaticfinalStringNAME="name"; SimpleAdaptersaPageID;//分页栏适配器 ArrayList<HashMap<String,String>>lstPageID;//分页栏的数据源,与PageSize和数据总数相关 @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); btnCreateDB=(Button)this.findViewById(R.id.btnCreateDB); btnCreateDB.setOnClickListener(newClickEvent()); btnInsert=(Button)this.findViewById(R.id.btnInsertRec); btnInsert.setOnClickListener(newClickEvent()); btnClose=(Button)this.findViewById(R.id.btnClose); btnClose.setOnClickListener(newClickEvent()); edtSQL=(EditText)this.findViewById(R.id.EditText01); GridViewgridview=(GridView)findViewById(R.id.gridview);//分页栏控件 //生成动态数组,并且转入数据 lstPageID=newArrayList<HashMap<String,String>>(); //生成适配器的ImageItem<====>动态数组的元素,两者一一对应 saPageID=newSimpleAdapter(testSQLite.this,//没什么解释 lstPageID,//数据来源 R.layout.pagebuttons,//XML实现 newString[]{"ItemText"}, newint[]{R.id.ItemText}); //添加并且显示 gridview.setAdapter(saPageID); //添加消息处理 gridview.setOnItemClickListener(newOnItemClickListener(){ @Override publicvoidonItemClick(AdapterView<?>arg0,Viewarg1,intarg2, longarg3){ LoadPage(arg2);//根据所选分页读取对应的数据 } }); } classClickEventimplementsView.OnClickListener{ @Override publicvoidonClick(Viewv){ if(v==btnCreateDB){ CreateDB(); }elseif(v==btnInsert){ InsertRecord(16);//插入16条记录 RefreshPage(); }elseif(v==btnClose){ db.close(); } } } /* *读取指定ID的分页数据 *SQL:Select*FromTABLE_NAMELimit9Offset10; *表示从TABLE_NAME表获取数据,跳过10行,取9行 */ voidLoadPage(intpageID) { Stringsql="select*from"+TABLE_NAME+ "Limit"+String.valueOf(PageSize)+"Offset"+String.valueOf(pageID*PageSize); Cursorrec=db.rawQuery(sql,null); setTitle("当前分页的数据总数:"+String.valueOf(rec.getCount())); //取得字段名称 Stringtitle=""; intcolCount=rec.getColumnCount(); for(inti=0;i<colCount;i++) title=title+rec.getColumnName(i)+""; //列举出所有数据 Stringcontent=""; intrecCount=rec.getCount(); for(inti=0;i<recCount;i++){//定位到一条数据 rec.moveToPosition(i); for(intii=0;ii<colCount;ii++)//定位到一条数据中的每个字段 { content=content+rec.getString(ii)+""; } content=content+"/r/n"; } edtSQL.setText(title+"/r/n"+content);//显示出来 rec.close(); } /* *在内存创建数据库和数据表 */ voidCreateDB(){ //在内存创建数据库 db=SQLiteDatabase.create(null); Log.e("DBPath",db.getPath()); Stringamount=String.valueOf(databaseList().length); Log.e("DBamount",amount); //创建数据表 Stringsql="CREATETABLE"+TABLE_NAME+"("+ID +"textnotnull,"+NAME+"textnotnull"+");"; try{ db.execSQL("DROPTABLEIFEXISTS"+TABLE_NAME); db.execSQL(sql); }catch(SQLExceptione){} } /* *插入N条数据 */ voidInsertRecord(intn){ inttotal=id+n; for(;id<total;id++){ Stringsql="insertinto"+TABLE_NAME+"("+ID+","+NAME +")values('"+String.valueOf(id)+"','test');"; try{ db.execSQL(sql); }catch(SQLExceptione){ } } } /* *插入之后刷新分页 */ voidRefreshPage() { Stringsql="selectcount(*)from"+TABLE_NAME; Cursorrec=db.rawQuery(sql,null); rec.moveToLast(); longrecSize=rec.getLong(0);//取得总数 rec.close(); intpageNum=(int)(recSize/PageSize)+1;//取得分页数 lstPageID.clear(); for(inti=0;i<pageNum;i++){ HashMap<String,String>map=newHashMap<String,String>(); map.put("ItemText","No."+String.valueOf(i)); lstPageID.add(map); } saPageID.notifyDataSetChanged(); } }
以上就是本文的全部内容,希望对大家的学习有所帮助。