Android提高第八篇之SQLite分页读取

本文来自http://blog.youkuaiyun.com/hellogv/ ,引用必须注明出处!

Android包含了常用于嵌入式系统的SQLite,免去了开发者自己移植安装的功夫。SQLite 支持多数 SQL92 标准,很多常用的SQL命令都能在SQLite上面使用,除此之外Android还提供了一系列自定义的方法去简化对SQLite数据库的操作。不过有跨平台需求的程序就建议使用标准的SQL语句,毕竟这样容易在多个平台之间移植。

先贴出本文程序运行的结果:

本文主要讲解了SQLite的基本用法,如:创建数据库,使用SQL命令查询数据表、插入数据,关闭数据库,以及使用GridView实现了一个分页栏(关于GridView的用法),用于把数据分页显示。

分页栏的pagebuttons.xml的源码如下:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:paddingBottom="4dip" android:layout_width="fill_parent"> <TextView android: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的源码如下:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Button android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/btnCreateDB" android:text="创建数据库"></Button> <Button android:layout_height="wrap_content" android:layout_width="fill_parent" android:text="插入一串实验数据" android:id="@+id/btnInsertRec"></Button> <Button android:layout_height="wrap_content" android:id="@+id/btnClose" android:text="关闭数据库" android:layout_width="fill_parent"></Button> <EditText android:text="@+id/EditText01" android:id="@+id/EditText01" android:layout_width="fill_parent" android:layout_height="256dip"></EditText> <GridView android:id="@+id/gridview" android:layout_width="fill_parent" android:layout_height="32dip" android:numColumns="auto_fit" android:columnWidth="40dip"></GridView> </LinearLayout>

本文程序源码如下:

package com.testSQLite; import java.util.ArrayList; import java.util.HashMap; import android.app.Activity; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.GridView; import android.widget.SimpleAdapter; public class testSQLite extends Activity { /** Called when the activity is first created. */ Button btnCreateDB, btnInsert, btnClose; EditText edtSQL;//显示分页数据 SQLiteDatabase db; int id;//添加记录时的id累加标记,必须全局 static final int PageSize=10;//分页时,每页的数据总数 private static final String TABLE_NAME = "stu"; private static final String ID = "id"; private static final String NAME = "name"; SimpleAdapter saPageID;// 分页栏适配器 ArrayList<HashMap<String, String>> lstPageID;// 分页栏的数据源,与PageSize和数据总数相关 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btnCreateDB = (Button) this.findViewById(R.id.btnCreateDB); btnCreateDB.setOnClickListener(new ClickEvent()); btnInsert = (Button) this.findViewById(R.id.btnInsertRec); btnInsert.setOnClickListener(new ClickEvent()); btnClose = (Button) this.findViewById(R.id.btnClose); btnClose.setOnClickListener(new ClickEvent()); edtSQL=(EditText)this.findViewById(R.id.EditText01); GridView gridview = (GridView) findViewById(R.id.gridview);//分页栏控件 // 生成动态数组,并且转入数据 lstPageID = new ArrayList<HashMap<String, String>>(); // 生成适配器的ImageItem <====> 动态数组的元素,两者一一对应 saPageID = new SimpleAdapter(testSQLite.this, // 没什么解释 lstPageID,// 数据来源 R.layout.pagebuttons,//XML实现 new String[] { "ItemText" }, new int[] { R.id.ItemText }); // 添加并且显示 gridview.setAdapter(saPageID); // 添加消息处理 gridview.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { LoadPage(arg2);//根据所选分页读取对应的数据 } }); } class ClickEvent implements View.OnClickListener { @Override public void onClick(View v) { if (v == btnCreateDB) { CreateDB(); } else if (v == btnInsert) { InsertRecord(16);//插入16条记录 RefreshPage(); }else if (v == btnClose) { db.close(); } } } /* * 读取指定ID的分页数据 * SQL:Select * From TABLE_NAME Limit 9 Offset 10; * 表示从TABLE_NAME表获取数据,跳过10行,取9行 */ void LoadPage(int pageID) { String sql= "select * from " + TABLE_NAME + " Limit "+String.valueOf(PageSize)+ " Offset " +String.valueOf(pageID*PageSize); Cursor rec = db.rawQuery(sql, null); setTitle("当前分页的数据总数:"+String.valueOf(rec.getCount())); // 取得字段名称 String title = ""; int colCount = rec.getColumnCount(); for (int i = 0; i < colCount; i++) title = title + rec.getColumnName(i) + " "; // 列举出所有数据 String content=""; int recCount=rec.getCount(); for (int i = 0; i < recCount; i++) {//定位到一条数据 rec.moveToPosition(i); for(int ii=0;ii<colCount;ii++)//定位到一条数据中的每个字段 { content=content+rec.getString(ii)+" "; } content=content+"/r/n"; } edtSQL.setText(title+"/r/n"+content);//显示出来 rec.close(); } /* * 在内存创建数据库和数据表 */ void CreateDB() { // 在内存创建数据库 db = SQLiteDatabase.create(null); Log.e("DB Path", db.getPath()); String amount = String.valueOf(databaseList().length); Log.e("DB amount", amount); // 创建数据表 String sql = "CREATE TABLE " + TABLE_NAME + " (" + ID + " text not null, " + NAME + " text not null " + ");"; try { db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); db.execSQL(sql); } catch (SQLException e) {} } /* * 插入N条数据 */ void InsertRecord(int n) { int total = id + n; for (; id < total; id++) { String sql = "insert into " + TABLE_NAME + " (" + ID + ", " + NAME + ") values('" + String.valueOf(id) + "', 'test');"; try { db.execSQL(sql); } catch (SQLException e) { } } } /* * 插入之后刷新分页 */ void RefreshPage() { String sql = "select count(*) from " + TABLE_NAME; Cursor rec = db.rawQuery(sql, null); rec.moveToLast(); long recSize=rec.getLong(0);//取得总数 rec.close(); int pageNum=(int)(recSize/PageSize) + 1;//取得分页数 lstPageID.clear(); for (int i = 0; i < pageNum; i++) { HashMap<String, String> map = new HashMap<String, String>(); map.put("ItemText", "No." + String.valueOf(i)); lstPageID.add(map); } saPageID.notifyDataSetChanged(); } }

android滑动SQLite分页加载 android的分页加载是非常有用且非常常见的功能,我对分页加载做了一个例子很实用,希望能给你带来帮助。 立即下载

相关推荐

C#海康威视摄像头控制,将IntPtr转换成Bitmap图片

C#通过skd控制海康威视摄像头,获取bitmap格式图片

ReflexMechanism的博客 6586

WPF 数据库 SQLite 分页处理

最近写的上位机主页面 因为需要展示收到的报文信息,所以当收发量变大时,内存占用会越来越大,在软件测试的时候甚至会达到数GB,最后想用数据库把这些收到的数据暂先存起来,然后通过对数据库的读取,分页获取历史报文。首先大概展示一下我的主窗口页面。

qq_45268443的博客 1296

树莓派Bookworm系统避坑指南:3种方法解决pip install报错externally-managed-environment

本文详细解析树莓派Bookworm系统中pip install报错externally-managed-environment的成因,并提供三种实用解决方案:使用虚拟环境(venv)隔离项目依赖、通过pipx管理全局Python工具,以及理解风险后的系统安装方法。帮助开发者安全高效地管理Python环境,避免系统冲突。

android的专栏 763

8.SQLite分页读取

Android内置了常用于嵌入式系统的SQLite,免去了开发者自己安装的功夫。SQLite 支持多数 SQL92 标准,很多常用的SQL命令都能在SQLite上面使用,除此之外Android还提供了一系列自定义的方法去简化对SQLite数据库的操作。不过有跨平台需求的程序就建议使用标准的SQL语句,毕竟这样容易在多个平台之间移植。 先贴出本文程序运行的结果: 本文主要讲解了S

天。朝程序猿的专栏 1298

RT-DETR训练前的准备,将数据集划分成训练集、测试集验证集(附完整脚本及使用说明)

在计算机视觉领域,当我们着手训练一个模型时,。其中,将数据集划分为和更是一项基础性且关键的操作。这篇博客分析了这一划分背后的原因、其重要意义以及如何通过代码实现,帮助大家更好地理解和运用这一技巧,。

Limiiiing的博客 906

PoP(Package on Package)封装技术探讨

PoP(Package on Package)封装技术摘要 PoP是一种3D封装技术,通过垂直堆叠已完成封装的器件(如SoC+DRAM)实现高密度集成,典型应用于智能手机等空间受限场景。其核心优势包括:节省主板面积(垂直堆叠)、优化高速信号完整性(短互连路径)、提升供应链灵活性(独立测试与选型)。PoP结构分为底封装(通常为Flip-Chip BGA的SoC)和顶封装(如FBGA存储芯片),通过焊球阵列互连,一次回流焊完成组装。

sinat_15150363的博客 366

android中滑动SQLite数据库分页加载

今天用到了android中滑动SQlit数据库分页加载技术,写了个测试工程,将代码贴出来和大家交流一下: MainActivity package com.example.testscrollsqlite; import java.util.ArrayList; import android.app.ActionBar.LayoutParams; import android.app.A...

iteye_709的博客 212

Xilinx高级调试方法--远程调试

本文主要介绍Xilinx的一些高级调试方法,以及如何使用Xilinx的相关IP。

斌赋的博客 3308

Android--SQLite数据库分页

如果数据库特别大,存储的数据特别多,我们把它加载到适配器控件中,很容易出现内存溢出的情况,并且数据加载的速度也会受到影响。所以我们在加载数据的时候,为了解决这个问题,让用户体验更好,我们可以采用分页的形式,每次加载10条,或者20条,当用户去滑动,有查看下一页的需求时,再次查询数据库,进行数据的展示。要进行数据库分页,我们要用到的就是 limit 子句,如下:select * from person

HardWorkingAnt的博客 1800

跨平台也要跑得像原生一样顺:SAP GUI for Java 的安装、配置、运维与自动化实战

摘要:SAP GUI for Java 作为跨平台客户端解决方案,在 S/4HANA 时代仍发挥关键作用,特别适用于 macOS/Linux 环境下的 ABAP 开发和系统运维。其主要优势包括:平台无关性(支持 Windows/macOS/Linux/UNIX)、与 Windows 版本一致的交互体验、对核心事务码(如 ST22/SM21)的完整支持。版本管理需注意 7.80 已停止支持,建议升级至 8.10。安装支持原生包和通用 JAR 两种方式,推荐团队标准化版本和连接配置(通过 SAP UI Land

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 678

【Camera2教程一】Camera2的框架Pipeline和framework中核心类和接口的详细介绍

Camera2 的 API 模型被设计成一个 Pipeline(管道),它按顺序处理每一帧的请求并返回请求结果给客户端。

jiangchaobing_2017的博客 791
上一篇: Android提高第七篇之XML解析与生成
下一篇: Android提高第九篇之SQLite分页表格
「已注销」
博客等级 码龄8年 1粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值