您的位置:首页 > 移动开发 > Android开发

android(数据库分页显示)_sqlitedatabase

2014-05-02 15:56 435 查看
package com.qiao.android11_sqlitedatabase_te;

import java.io.File;

import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.widget.SimpleCursorAdapter;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.ListView;

//总结;根据SQLitDatabase连接数据库返回一个动作执行者 去执行rawQuery 或者execSQL 或者 beginTransaction 或endTransaction
//首先使用rawQuery参数是一个 sql语句查询字符串,第二个如果不要求偏移量的话可以为空
//
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
private ListView listView_main_show;
private int pageCount = 0;// 总行数;
private int everyPageSize = 7;// 每页显示的行数;
private int countCount = 0;// 总页数;
private int curPage = 1;// 当前页,初始化为1;
private int offset = 0;// 偏移量初始化为0;
private SQLiteDatabase db = null;

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

listView_main_show = (ListView) findViewById(R.id.listView_main_show);

String path = Environment.getExternalStorageDirectory()
.getAbsolutePath()
+ File.separator
+ "qiao"
+ File.separator
+ "android_manual.db";// 获取路径
Log.i(TAG, "== path" + path);
db = SQLiteDatabase.openDatabase(path, null, 1);
// 连接数据库时候使用SQLiteDatabase,这里边三个参数一个是数据路径,第二个可以为空,第三个访问方式
// 可以使用SQLiteDatabase.open_readonly;选择这种只读模式去连接已经存在的数据库文件。
String sq = "select id as _id,title from android_datastorage";
Log.i(TAG, "== sq" + sq);
Cursor cursor = db.rawQuery(sq, null);// 有他是求总行数的 用的就是Cursor
Log.i(TAG, "== cursor" + cursor);
// 1、 上边连接上之后会有有返回值类型SQLiteDatabase db = 。。。。。直接用他有四个方法分别是
// 2、db.rawQuery。。这哥们专门执行带有占位符的sql查询语句,目前用在分页展示中
// 3、db.execSQL。。这哥们专门用在执行带有占位符的sql语句--包含(update,insert,delete语句)--总之除了查询都能
// --上边两个都是带占位符的操作方法
// 4、db.beginTransaction。。db.endTransaction --- 这两个都是事物
pageCount = cursor.getCount();// 返回所查询数据的总行数
Log.i(TAG, "== pageCount" + pageCount);
countCount = (int) Math.ceil(pageCount / (double) everyPageSize);// 总页数
Log.i(TAG, "== countCount" + countCount);
/*
* 上边主要是获取数据库路径然后连接数据库,用它的返回值去执行查询返回Cursor结果集,至此,所有的结果都存在结果集中,
* 可以用Cursor的方法去获取文件的总行数,getCount(); 至于获得总页数的话,首先先要定义每页有几条数据比如7条8条,
* 这些都是自己定义的,看自己的屏幕一屏幕能放下多少个 然后 总行数 / 每行自定义个数 (向上取整)= 总页数
*/
fillListView(1);
}

public void clickButton(View view) {
switch (view.getId()) {
case R.id.button_main_first:
if (curPage != 1)
curPage = 1;
break;
case R.id.button_main_previous:
if (curPage >= 2) {
curPage--;
} else {
curPage = 1;
}
break;
case R.id.button_main_next:
if (curPage <= countCount - 1) {
curPage++;
} else {
curPage = countCount;
}
break;
case R.id.button_main_last:
if (curPage != countCount)
curPage = countCount;
break;
default:
break;
}
fillListView(curPage);
}

public void fillListView(int currentpage) {
offset = everyPageSize * (curPage - 1);// 偏移量
String sql = "select id as _id,title from android_datastorage limit?,?";
Cursor cursor2 = db.rawQuery(sql, new String[] { offset + "",
everyPageSize + "" });
SimpleCursorAdapter adapter = new SimpleCursorAdapter(
MainActivity.this, R.layout.item_listview, cursor2,
new String[] { "_id", "title" },
new int[] { R.id.textView_item__main_id,
R.id.textView_item_title }, 2);
listView_main_show.setAdapter(adapter);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: