在使用Android Studio,使用数据库时查询用到cursor。
但是怎么查询到之后,怎么使用里面的数据呢?
在这里以我用的Sqlite为例:
使用Cursor对象获取查询结果
一、要执行查询,需要用到SQLiteDatabase 对象的rawQuery()方法,第1个参数为SELECT语句,第2个参数设为null即可:
rawQuery("SELECT * FROM test",null); //返回test数据表的所有记录
二、rawQuery()方法返回的查询结果为Cursor类的对象。Cursor可称为”数据指针“,要读取查询结果中某一个记录,就必须将Cursor指标指到它,之后才能读取其内容。
moveToFirst() | 移到第一个记录 | moveToLast() | 移到最后一个记录 |
moveToNext() | 移到下一个记录 | moveToPrevious() | 移到前一个记录 |
Cursor cur = db.rawQuery("SELECT * FROM test");//执行查询
if(cur.moveToFirst()) //查询结果中有数据才继续
do{ //利用do/while循环逐个读取
… //读取指针所指的数据
}while(cur.moveToNext()); //若还有下一个记录,就继续do/while循环
public class MainActivity extends ActionBarActivity {
static final String db_name = "testDB"; //数据库名称
static final String tb_name = "test"; // 数据表名称
SQLiteDatabase db; //数据库对象
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//打开或创建数据库
db = openOrCreateDatabase(db_name, Context.MODE_PRIVATE,null);
String createTable = "CREATE TABLE IF NOT EXISTS " +
tb_name +
"(name VARCHAR(32)," +
"phone VARCHAR(16)," +
"email VARCHAR(64))";
db.execSQL(createTable); //创建数据表
Cursor c = db.rawQuery("SELECT * FROM "+tb_name,null);//查询tb_name数据表中的所有数据
if(c.getCount()==0){ //若无数据,则立即新增两项数据
addData("Flag Publishing Co.","6666666","service@flag.com.tw");
addData("PCDIY Magazine","7777777","service@flag.com.tw");
c=db.rawQuery("SELECT * FROM "+tb_name,null);//重新查询
}
if (c.moveToFirst()) { //移到第1项数据(若有数据才继续)
String str = "总共有 "+c.getCount()+"项数据\n";
str+="-------\n";
do { //逐项读出数据,并串接成信息字符串
str+="name:"+c.getString(0)+"\n";
str+="phone:"+c.getString(1)+"\n";
str+="email:"+c.getString(2)+"\n";
str+="------\n";
}while(c.moveToNext()); //有下一项就继续循环
TextView txv = (TextView) findViewById(R.id.txv);
txv.setText(str); //显示信息字符串
}
db.close(); //关闭数据库
}
private void addData(String name,String phone,String email) {
ContentValues cv = new ContentValues(3); //创建含3个数据项的对象
cv.put("name", name);
cv.put("phone",phone);
cv.put("email", email);
db.insert(tb_name, null, cv); //将数据加到数据表
}
}
那么怎么页面之间传输获取到的数据呢?
一、第一种数据传递的方式是通过inputExtra方法来进行数据的传递的
Intent intent=new Intent(MainActivity.this,XXX.class);//xxx为你要传递数据的界面类名
intent.putExtra("这里写你想要传递的数据名(可以随便写,但是别忘了待会还得用)", name);//name是你要传递的数据,按照第三步骤自己提前获取
startActivity(intent);跟Intent的用法很像,只是多了上面的putextra代码
接下来就是接受数据了,到你的xxx.Java文件里
Intent intent=getIntent();这是默认格式,直接用就可以
String name=intent.getStringExtra("name");
//前面这个name是可以随便写,但是后面这个name必须是你刚刚写的传递数据的名字
//这两个名字可以是一样的,你怕混淆可以用一样的,
现在已经在新的类文件的中获取到了传递的数据,接下来你就用了
比如,把这个数据显示出来:
第一、在新的类文件的布局文件里写好一个textview再绑定,然后可以用
xx.setText(name);//这里用拿刚刚的name为例,根据自己的需求填写
总结:其实很简单,第一步用intent结合extra传递数据
第二、用extra getstring接受数据就可以
二、android传递数据的第二中方式第二种传递数据的方式是bundle:
Bundle传递对象示例
当传递的参数很多时可以传递一个对象。当Bundle传递的是对象或对象数组时,必须实现Serialiable或Parcelable接口。
1. 实现Serializable接口
package com.example.bundletest;
import java.io.Serializable;
public class FunPerson implements Serializable {
//创建实例变量
private String name;
private int num;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setNum(int num) {
this.num = num;
}
public int getNum() {
return num;
}
}
2. 向Bundle写入数据文章来源:https://www.toymoban.com/news/detail-757483.html
public class MainActivity extends AppCompatActivity {
//声明控件对象
private Button mButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取控件的对象
mButton = findViewById(R.id.button);
//为Button绑定监听器
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/**
* 存入数据
*/
FunPerson person = new FunPerson();
//设置数据
String name = "Trump is fun";
int num = 12345;
person.setName("name");
person.setNum(num);
//实例化一个Bundle
Bundle bundle = new Bundle();
//把FunPerson数据放入到Bundle容器中
bundle.putSerializable("Person", person);
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
//把Bundle容器中的数据放到Intent中
intent.putExtras(bundle);
//启动该Intent,实现Activity的跳转
startActivity(intent);
}
});
}
}
3. 从Bundle读取数据文章来源地址https://www.toymoban.com/news/detail-757483.html
public class SecondActivity extends AppCompatActivity {
//声明控件对象
private TextView textView;
@SuppressLint("SetTextI18n")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
//获取控件的对象
textView = findViewById(R.id.text_view);
/**
*读取数据
*/
Intent intent = getIntent();
//从Intent中取出Bundle
Bundle bundle = intent.getExtras();
//获取FunPerson里的数据数据
assert bundle != null;
FunPerson person = (FunPerson)bundle.getSerializable("Person");
assert person != null;
String name = person.getName();
int num = person.getNum();
//显示数据
textView.setText(name + "\n" + num);
}
}
到了这里,关于Android Studio Cursor里面的数据获取并且使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!