文档章节

sqlite数据库数据的分页

初来小修
 初来小修
发布于 2016/01/24 20:34
字数 835
阅读 16
收藏 0

sqlite数据库数据的分页

 

效果图示例

 

 

1、在清单里添加对数据库操作的权限

代码

 

  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

 

=================================

 

2、有2个布局 一个activity_main.xml 一个item_activity.xml

1)activity_main.xml布局文件

 

代码

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ListView
        android:id="@+id/listView_main_titlelist"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true">
    </ListView>
<!-- 进度加载控件 -->
    <LinearLayout
        android:id="@+id/layout_more"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#fff"
        android:textColor="#000"
        android:layout_alignParentLeft="true"
        android:layout_alignParentBottom="true"
        android:onClick="clickButton"
        android:visibility="invisible"
        android:gravity="center">
        <ProgressBar
            android:id="@+id/progressBar1"
            style="?android:attr/progressBarStyleSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="20dp"/>

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="点击加载更多数据..."
            android:textSize="30sp"/>

    </LinearLayout>

</RelativeLayout>

 

-----------------------------------

item_activity.xml布局文件

 

代码

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/text_item_listview_id"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:text="TextView"
        android:textColor="#f00"
        android:textSize="40sp" />

    <TextView
        android:id="@+id/text_item_listview_name"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_weight="3"
        android:text="TextView"
        android:textColor="#00f"
        android:textSize="40sp" />

    <TextView
        android:id="@+id/text_item_listview_score"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_weight="3"
        android:text="TextView"
        android:textColor="#00f"
        android:textSize="40sp" />

</LinearLayout>

 

--------------------------------

3、有2个类 一个工具类 用来对数据库的增删改查操作一个MainActivity类

 

工具类

 

代码

 

public class Sqlite_operate_utils {

 private static String DB_PATH = Environment.getExternalStorageDirectory() + File.separator + "stuentinfo.db";
 private SQLiteDatabase db;
 
 //构造函数 new 该类的时候 就去找 需要找的 数据库
 public Sqlite_operate_utils() {
  db = SQLiteDatabase.openDatabase(DB_PATH, null, SQLiteDatabase.OPEN_READWRITE);
 }
 
 //查询 数据的 方法1
 public Cursor sqlite_select(String content, String[] condition){
  return db.rawQuery(content, condition);
 }
 
 //查询 数据 的 方法2
 public List<Map<String, String>> sqlite_selectlist(String content, String[] condition){
  Log.i("data", "cursor:");
  Cursor cursor = db.rawQuery(content, condition);
  return cursorToList(cursor);
 }
 //返回List
 public List<Map<String, String>> cursorToList(Cursor cursor) {
  List<Map<String, String>> list = new ArrayList<Map<String,String>>();
  while(cursor.moveToNext()){//数据库表的 行
   Map<String, String> map = new HashMap<String, String>();
   for(int i = 0;i<cursor.getColumnCount();i++){//数据库表的列
    map.put(cursor.getColumnName(i), cursor.getString(i));
   }
   list.add(map);
  }
  cursor.close();
  Log.i("data", "list:" + list.size());
  return list;
 }
 
 //增删改 的方法
 //返回布尔型 方便 查看 数据 操作 是否成功
 public boolean executeData(String execute_content, Object[] bindArgs){
  try {
   if(bindArgs == null){//要绑定占位符 的参数值
    db.execSQL(execute_content);
    return true;
   }else{
    db.execSQL(execute_content, bindArgs);
    return true;
   }
  } catch (SQLException e) {
   e.printStackTrace();
   return false;
  }
 }
 
 //关闭db
 public void destroy(){
  if(db != null){
   db.close();
  }
 }
}

 

 

==========================

 

 

 

 

MianActivity类

 

代码

 

 

public class MainActivity extends Activity {

 private ListView listview;
 private LinearLayout layout_progress;
 private Sqlite_operate_utils sql;
 private SimpleAdapter adapter;
 private List<Map<String, String>> list_datainfo;

 // 分页属性 声明
 private int pageNo = 1;// 第几页
 private int pageSize = 10;// 每页有多少条数据
 private int pageCount;// 总页数
 private boolean isbottom;// 用来判断 是否是 底部

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  this.listview = (ListView) this
    .findViewById(R.id.listView_main_titlelist);
  this.layout_progress = (LinearLayout) this
    .findViewById(R.id.layout_more);
  sql = new Sqlite_operate_utils();
  
  //计算 数据库 学生信息表的总页数
        String content = "select count(*) from studentinfo ";//一行一列 数据
  Cursor cursor = sql.sqlite_select(content, null);
  cursor.moveToFirst();//移动游标 到一地个位置
     int count = cursor.getInt(0);//总记录数
  //关闭游标
  cursor.close();
  pageCount = (int)Math.ceil(count/(double)pageSize);
  
  list_datainfo = getInfo();
  adapter = new SimpleAdapter(this, list_datainfo, R.layout.item_listview,
    new String[] { "s_sex", "s_age", "s_score" }, new int[] {
      R.id.text_item_listview_name,
      R.id.text_item_listview_id,
      R.id.text_item_listview_score });
  listview.setAdapter(adapter);
  //listview滚动 事件 监听
  listview.setOnScrollListener(new OnScrollListener() {
   @Override
   public void onScrollStateChanged(AbsListView view, int scrollState) {
    if(isbottom){
     if(pageCount == pageNo){
      Toast.makeText(MainActivity.this, "没有更多数据!!", Toast.LENGTH_SHORT).show();
     }else{
      layout_progress.setVisibility(View.VISIBLE);
     }
    }
    
   }
   @Override
   public void onScroll(AbsListView view, int firstVisibleItem,
     int visibleItemCount, int totalItemCount) {
    isbottom = ((firstVisibleItem + visibleItemCount) == totalItemCount);
   }
  });
 }

 //进度加载 的点击事件 监听
 public void clickButton(View view){
  if(pageNo<pageCount){
   pageNo++;
   list_datainfo.addAll(getInfo());
   //更新 listview 视图
   adapter.notifyDataSetChanged();
  }
  layout_progress.setVisibility(View.GONE);
 }
 private List<Map<String, String>> getInfo() {
  List<Map<String, String>> list = new ArrayList<Map<String,String>>();
  //分页
  int start = (pageNo - 1)*pageSize;
  String content = "select * from studentinfo limit ?,?";
  String[] condition = {start + "",pageSize + ""};
  list = sql.sqlite_selectlist(content, condition);
  return list;
 }
}

© 著作权归作者所有

初来小修
粉丝 4
博文 117
码字总数 80711
作品 0
广州
私信 提问
Android提高第八篇之SQLite分页读取

本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处! Android包含了常用于嵌入式系统的SQLite,免去了开发者自己移植安装的功夫。SQLite 支持多数 SQL92 标准,很多常用的SQL命令都...

晨曦之光
2012/03/14
1K
0
数据库访问之Sqlite的不同之处

在我的Winform开发框架中,底层的数据访问支持多种不同的数据库,在数据库访问的开发过程中,发现Sqlite多数情况下,操作都和SqlServer或者说是和标准Sql差不多的。当然,Sqlite本身也有一些...

长平狐
2012/08/22
90
0
数据库访问之Sqlite的不同之处

在我的Winform开发框架中,底层的数据访问支持多种不同的数据库,在数据库访问的开发过程中,发现Sqlite多数情况下,操作都和SqlServer或者说是和标准Sql差不多的。当然,Sqlite本身也有一些...

长平狐
2012/06/11
73
0
Lazarus实战开发之数据库SQLite(WIN32/WINCE)

本文来自http://blog.csdn.net/hellogv/ SQLite是一个轻量级的嵌入式数据库,在PC上大可不用它,但是在WINCE上,他就起很大作用了(ACCESS在WINCE上停止升级,SQL CE又太庞大)。 在Lazarus f...

晨曦之光
2012/03/14
1K
0
Winform分页控件更新之集成Sqlite数据库分页

在Winform开发中,一直离不开分页处理,好的分页控件封装,能为开发节省很多时间和繁琐工作,对分页控件一直的改进和完善,也是我的兴趣之一。分页控件一直都有一些小的更新,不过基本上已能...

长平狐
2012/08/22
172
0

没有更多内容

加载失败,请刷新页面

加载更多

Angular 英雄编辑器

应用程序现在有了基本的标题。 接下来你要创建一个新的组件来显示英雄信息并且把这个组件放到应用程序的外壳里去。 创建英雄组件 使用 Angular CLI 创建一个名为 heroes 的新组件。 ng gener...

honeymoose
33分钟前
3
0
Kernel DMA

为什么会有DMA(直接内存访问)?我们知道通常情况下,内存数据跟外设之间的通信是通过cpu来传递的。cpu运行io指令将数据从内存拷贝到外设的io端口,或者从外设的io端口拷贝到内存。由于外设...

yepanl
今天
6
0
hive

一、hive的定义: Hive是一个SQL解析引擎,将SQL语句转译成MR Job,然后再在Hadoop平台上运行,达到快速开发的目的 Hive中的表是纯逻辑表,就只是表的定义,即表的元数据。本质就是Hadoop的目...

霉男纸
今天
3
0
二、Spring Cloud—Eureka(Greenwich.SR1)

注:本系列文章所用工具及版本如下:开发工具(IDEA 2018.3.5),Spring Boot(2.1.3.RELEASE),Spring Cloud(Greenwich.SR1),Maven(3.6.0),JDK(1.8) Eureka: Eureka是Netflix开发...

倪伟伟
昨天
11
0
eclipse常用插件

amaterasUML https://takezoe.github.io/amateras-update-site/ https://github.com/takezoe/amateras-modeler modelGoon https://www.cnblogs.com/aademeng/articles/6890266.html......

大头鬼_yc
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部