android中用cursor游标取数据库游标的作用数据

用户名:HelloToDays
文章数:75
评论数:23
访问量:91487
注册日期:
阅读量:1297
阅读量:3317
阅读量:448605
阅读量:1133468
51CTO推荐博文
(1)Contact.javapackage com.example.l0831_sqlite_
* Contact类,封装数据
* @author asus
public class Contact {
private Integer _
public Contact() {
public Contact(String name, String phone) {
this.name =
this.phone =
public Contact(int id,String name, String phone) {
this.name =
this.phone =
public Integer get_id() {
public void set_id(Integer id) {
public String getName() {
public void setName(String name) {
this.name =
public String getPhone() {
public void setPhone(String phone) {
this.phone =
public String toString() {
return "Contants [id=" + _id + ", name=" + name + ", phone=" + phone
}(2)MyOpenHelper.javapackage com.example.l0831_sqlite_
import android.content.C
import android.database.sqlite.SQLiteD
import android.database.sqlite.SQLiteOpenH
public class MyOpenHelper extends SQLiteOpenHelper{
private static final String name = "contants"; // 数据库名称
private static final int version = 1; // 数据库版本
public MyOpenHelper(Context context) {
* 第三个参数:
* CursorFactory指定在执行查询时获得一个游标实例的工厂类。
* 设置为null,则使用系统默认的工厂类。
super(context, name, null, version);
public void onCreate(SQLiteDatabase db) {
// 创建contacts表,SQL表达式时提供的字段类型和长度仅为提高代码的可读性。
db.execSQL("CREATE TABLE IF NOT EXISTS contacts("
+ "_id integer primary key autoincrement,"
+ "name varchar(20)," + "phone varchar(50))");
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// 仅演示用,所以先删除表然后再创建。
db.execSQL("DROP TABLE IF EXISTS contacts");
this.onCreate(db);
}(3)ContactService.javapackage com.example.l0831_sqlite_
import java.util.ArrayL
import java.util.L
import android.content.C
import android.database.C
* 这个类的功能是把操作数据库的方法封装在里面
* @author asus
public class ContactsService {
private MyOpenHelper openH
// 构造方法,仅需传入SQLiteOpenHelper的实例即可
public ContactsService(Context context) {
this.openHelper = new MyOpenHelper(context);
* @param contact
public void save(Contact contact) {
//?表示传入的参数
String sql = "INSERT INTO contacts (name, phone) VALUES (?, ?)";
Object[] bindArgs = { contact.getName(), contact.getPhone() };
//获取数据库可写权限并执行插入的SQL语句
this.openHelper.getWritableDatabase().execSQL(sql, bindArgs);
* @param id
public Contact find(Integer id) {
String sql = "SELECT _id,name, phone FROM contacts WHERE _id=?";
String[] selectionArgs = { id + "" };
//查询出数据,放到Cursor对象中
//获取数据库可写权限,并执行查询语句(rawQuery)
Cursor cursor = this.openHelper.getReadableDatabase().rawQuery(sql,selectionArgs);
if (cursor.moveToFirst())//如果cursor不为空
return new Contact(cursor.getInt(0), cursor.getString(1),cursor.getString(2));
* @param contact
public void update(Contact contact) {
String sql = "UPDATE contacts SET name=?, phone=? WHERE _id=?";
Object[] bindArgs = { contact.getName(), contact.getPhone(),contact.get_id() };
this.openHelper.getWritableDatabase().execSQL(sql, bindArgs);
* @param id
public void delete(Integer id) {
String sql = "DELETE FROM contacts WHERE _id=?";
Object[] bindArgs = { id };
this.openHelper.getReadableDatabase().execSQL(sql, bindArgs);
* 获取记录数量
public long getCount() {
String sql = "SELECT count(*) FROM contacts";
Cursor cursor = this.openHelper.getReadableDatabase().rawQuery(sql,null);
cursor.moveToFirst();
return cursor.getInt(0);
* 获取分页数据
* @param startIndex
* @param maxCount
public List&Contact& getScrollData(long startIndex, long maxCount) {
String sql = "SELECT _id,name,phone FROM contacts LIMIT ?,?";
String[] selectionArgs = { String.valueOf(startIndex),String.valueOf(maxCount) };
Cursor cursor = this.openHelper.getReadableDatabase().rawQuery(sql,selectionArgs);
List&Contact& contacts = new ArrayList&Contact&();
while (cursor.moveToNext()) {
Contact contact = new Contact(cursor.getInt(0),cursor.getString(1), cursor.getString(2));
contacts.add(contact);
* 获取分页数据,提供给SimpleCursorAdapter使用。
* @param startIndex
* @param maxCount
public Cursor getScrollDataCursor(long startIndex, long maxCount) {
String sql = "SELECT _id,name,phone FROM contacts LIMIT ?,?";
String[] selectionArgs = { String.valueOf(startIndex),String.valueOf(maxCount) };
Cursor cursor = this.openHelper.getReadableDatabase().rawQuery(sql,selectionArgs);
}(4)MainActivity.javapackage com.example.l0831_sqlite_
import android.app.A
import android.database.C
import android.os.B
import android.view.V
import android.widget.AdapterV
import android.widget.AdapterView.OnItemClickL
import android.widget.ListV
import android.widget.SimpleCursorA
import android.widget.T
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//创建ContactsService的对象(操作数据库)
ContactsService contactsService = new ContactsService(this);
Contact contact=new Contact(1001,"塔诺","");
contactsService.save(contact);
contactsService.find(1001);
// 获取分页数据 ,提供给SimpleCursorAdapter使用
Cursor cursor = contactsService.getScrollDataCursor(0, 3);
// 获取ListView
ListView lv = (ListView) this.findViewById(R.id.listView);
// 创建SimpleCursorAdapter
SimpleCursorAdapter adapter = new SimpleCursorAdapter(
R.layout.contact_cell, //ListView引用的资源文件
cursor, //获取数据库数据的游标对象
new String[] { "_id", "name","phone" },//封装表中的列名
new int[] { R.id.tv_id, R.id.tv_name, R.id.tv_phone }); //封装ListView资源文件中的控件的id
// 设置ListView适配器
lv.setAdapter(adapter);
// 为ListView添加事件
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView&?& parent, View view,
int position, long id) {
Cursor cursor = (Cursor) parent.getItemAtPosition(position);
Toast.makeText(MainActivity.this, cursor.getString(1), Toast.LENGTH_SHORT).show();
}(5)运行结果:本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)6435人阅读
程序&语法(18)
public List&PointBean& getAllPoints() {
String sql = &select * from points&;
SQLiteDatabase db = helper.getWritableDatabase();
List&PointBean& pointList = new ArrayList&PointBean&();
PointBean point =
Cursor cursor = db.rawQuery(sql, null);
while (cursor.moveToNext()) {
point = new PointBean();
point.setPointName(cursor.getString(cursor
.getColumnIndex(&point_name&)));
point.setLongitude(cursor.getDouble(cursor
.getColumnIndex(&longitude&)));
point.setLatitude(cursor.getDouble(cursor
.getColumnIndex(&latitude&)));
pointList.add(point);
return pointL
Cursor是SQLite 数据库查询返回的行数集合,Cursor是一个游标接口,提供了遍历查询结果的方法,如移动指针方法move(),获得列值方法getString()等。以下是Cursor遍历的方法。
编译环境Eclipse
通过query获取数据:
SQLiteDatabase&dataBase=sqliteDB.openDB();
String table=&tab_running&;
String[] columns={&startaddress&,&startgpstime&,&startsystime&,&endaddress&,&endgpstime&,&endsystime&};//你要的数据 &
String selection=&finished=?&; &
String[] selectionArgs={&1&};//具体的条件,注意要对应条件字段 &
Cursor cursor=dataBase.query(table, columns, selection, selectionArgs, null, null, null);
根据列索引遍历读取列数据:
while(cursor.moveToNext())
//根据列的索引直接读取 &比如第0列的值
&&&String strValue=&cursor.getString(0); &
根据列名获取列索引遍历读取列数据:
while(cursor.moveToNext())
//根据列名获取列索引& &
int nameColumnIndex = cursor.getColumnIndex(“username&);
String strValue=cursor.getString(nameColumnIndex);&
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1203540次
积分:12354
积分:12354
排名:第1147名
原创:184篇
转载:330篇
评论:113条
(1)(3)(1)(5)(44)(29)(27)(20)(5)(27)(33)(44)(93)(30)(31)(2)(8)(15)(4)(6)(4)(2)(1)(1)(3)(2)(9)(12)(15)(1)(4)(4)(5)(1)(3)(2)(5)(9)(3)mysql cursor游标的使用,实例 -
- ITeye博客
博客分类:
mysql被oracle收购后,从mysql-5.5开始,将InnoDB作为默认存储引擎,是一次比较重大的突破。InnoDB作为支持事务的存储引擎,拥有相关的RDBMS特性:包括ACID事务支持,数据完整性(外健),灾难恢复能力等特性。
使用mysql做为数据库的话,将来程序员肯定要写很多,存储过程,function等。在写些东东的时候,游标肯定是少不了的。下面简单简介一下。一,什么是游标(cursor)
个人觉得就是一个cursor,就是一个标识,用来标识数据取到什么地方了。你也可以把它理解成数组中的下标。
二,游标(cursor)的特性
1,只读的,不能更新的。2,不滚动的3,不敏感的,不敏感意为服务器可以活不可以复制它的结果表
游标(cursor)必须在声明处理程序之前被声明,并且变量和条件必须在声明游标或处理程序之前被声明。
三,使用游标(cursor)
1.声明游标
DECLARE cursor_name CURSOR FOR select_statement这个语句声明一个游标。也可以在子程序中定义多个游标,但是一个块中的每一个游标必须有唯一的名字。声明游标后也是单条操作的,但是不能用SELECT语句不能有INTO子句。
2. 游标OPEN语句
OPEN cursor_name这个语句打开先前声明的游标。
3. 游标FETCH语句
FETCH cursor_name INTO var_name [, var_name] ...这个语句用指定的打开游标读取下一行(如果有下一行的话),并且前进游标指针。
4. 游标CLOSE语句
CLOSE cursor_name这个语句关闭先前打开的游标。
四,应用举例
1,测试表和数据
mysql& show create table users\G;
*************************** 1. row ***************************
Table: users
Create Table: CREATE TABLE `users` (
`ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`user_name` varchar(60) NOT NULL DEFAULT '',
`user_pass` varchar(64) NOT NULL DEFAULT '',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql& select *
+----+-----------+-----------+
| ID | user_name | user_pass |
+----+-----------+-----------+
+----+-----------+-----------+
4 rows in set (0.00 sec)
2,测试存储过程
mysql& delimiter |
mysql& create procedure test_cursor (in param int(10),out result varchar(90))
declare name varchar(20);
declare pass varchar(20);
declare cur_test CURSOR for select user_name,user_pass from test.
declare continue handler FOR SQLSTATE '02000' SET done = 1;
if param then
select concat_ws(',',user_name,user_pass) into result from test.users where id=
fetch cur_test into name,
select concat_ws(',',result,name,pass)
until done end
close cur_
Query OK, 0 rows affected (0.00 sec)
注意,在命令行缩进时,不要用tab,不然会提示,
Display all 749 possibilities? (y or n)? MBRINTERSECTSABS MBROVERLAPS。。。 。。。。。。。
1行,创建一个存储过程,注意:如果我把out result varchar(90)改成out result varchar,返回的结果中只有一个字符。2行,开始3行,定义一个变量name4行,定义变量pass5行,定义一下结束标识6行,定义一个光标
注意:declare 的内容不要放到if里面,不然会报错误的。7行,如果sqlstate等于02000时,把done设置成1,也就是找不到数据时8,10,17行,if判断9行,根据参数,把数据取出来,放到result中11行,打开光标12,15行,repeat循环,根php的do while原理一样13行,从光标中取出数据。14行,将数据合并起来16行,关闭光标17,18行,标签闭合。
3,测试结果
mysql& call test_cursor(3,@test);
Query OK, 0 rows affected (0.00 sec)
mysql& select @
+-----------+
+-----------+
| ying,ying |
+-----------+
1 row in set (0.00 sec)
mysql& call test_cursor('',@test);
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql& select @
+-------------------------------------------------------+
+-------------------------------------------------------+
| tank,tank,zhang,zhang,ying,ying,tank,zhang,tank,zhang |
+-------------------------------------------------------+
1 row in set (0.00 sec)
浏览 26225
浏览: 131837 次
来自: 北京本帖子已过去太久远了,不再提供回复功能。}

我要回帖

更多关于 数据库游标的使用 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信