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();
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助。