如何从android中的sqlite中检索数据
Posted
技术标签:
【中文标题】如何从android中的sqlite中检索数据【英文标题】:how to retrieve data from sqlite in android 【发布时间】:2019-02-20 01:02:51 【问题描述】:我正在开发一个 sqlite 数据库,我确信我已经正确地插入了 sqlite。 现在我正在使用游标从 sqlite 获取数据,但是当我将数据设置为 Texview 时,我的应用程序崩溃了。这是我的桌子:
这是我的光标代码:
SQLiteDatabase db = this.getReadableDatabase();
String query = "SELECT * FROM " + PRODUCT_TABLE + " where id = 23";
Cursor cursor = db.rawQuery(query,null);
return cursor;
这是我从数据库中获取数据的活动代码
dbHelper = new DBHelper(context);
Cursor c = dbHelper.getCheckOutProduct();
if (c != null)
while (c.moveToNext())
int Id = c.getInt(0);
int paymentTypeID = c.getInt(1);
int customerID = c.getInt(2);
我在哪里犯错了?先感谢您 here is my exception
【问题讨论】:
请将错误和logcat添加到问题中。 logcat 中的异常在 logcat 中立即消失。我没有显示异常 从 Logcat 窗口中选择死进程并复制错误信息 请看是否正确:String query = "SELECT * FROM " + ORDER_TABLE + " WHERE ID = "+ autoOrderId;光标 cursor = db.rawQuery(query,null); 【参考方案1】:你的问题是你选择了所有的列
String query = "SELECT * FROM " + ORDER_TABLE + " ORDER BY ID DESC LIMIT 1 ";
但是您没有获得 AddressId 列的列索引
改变
dbHelper = new DBHelper(context);
Cursor c = dbHelper.getCheckOutRequest();
if (c != null)
while (c.moveToNext())
int Id = c.getInt(0);
int paymentTypeID = c.getInt(1);
int customerID = c.getInt(2);
到
dbHelper = new DBHelper(context);
Cursor c = dbHelper.getCheckOutRequest();
if (c != null)
while (c.moveToNext())
int Id = c.getInt(0);
int AddressID = c.getInt(1);
int paymentTypeID = c.getInt(2);
int customerID = c.getInt(3);
【讨论】:
我现在已经完成了。我有另一个例外,请参阅我更新的问题 你需要使用 movetoFirst() @ansar abbas【参考方案2】:可能是因为您将 String
转换为 int
,试试这个 -
int Id = 0;
int paymentTypeID = 0;
int customerID = 0;
dbHelper = new DBHelper(context);
Cursor c = dbHelper.getCheckOutRequest();
if (c != null)
while (c.moveToNext())
Id = c.getInt(0);
paymentTypeID = c.getInt(1);
customerID = c.getInt(2);
然后在Textview中,
textView.setText(String.valueOf(Id));
【讨论】:
列的数据类型为整数类型 @ansarabbas 更新了答案,同时显示 logcat 请看是否正确:String query = "SELECT * FROM " + ORDER_TABLE + " WHERE ID = "+ autoOrderId;光标 cursor = db.rawQuery(query,null); 我现在已经完成了。我有另一个例外,看到你更新的问题【参考方案3】:让我们改变你的光标方式并以其他代码方式 你有这个表,你想设置并从中获取数据嗯,让我们尝试更努力的代码 但是接下来用起来会很容易
||========================================||
|| ORDER_TABLE ||
||========================================||
|| ID ||
|| AddressID ||
|| PaymentTypeID ||
|| CustomerID ||
||========================================||
将此函数放入 DBHelper 类中
public ArrayList<Map<String, String>> getorder()
ArrayList<Map<String, String>> array_list = new ArrayList<>();
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery("select * from " + ORDER_TABLE + " ORDER BY ID DESC LIMIT 1 " , null);
res.moveToFirst();
while(res.isAfterLast() == false)
Map<String, String> datanum = new HashMap<String, String>();
datanum.put("ID", res.getString(res.getColumnIndex("ID")));
datanum.put("AddressID", res.getString(res.getColumnIndex("AddressID")));
datanum.put("PaymentTypeID", res.getString(res.getColumnIndex("PaymentTypeID")));
datanum.put("CustomerID", res.getString(res.getColumnIndex("CustomerID")));
array_list.add(datanum);
res.moveToNext();
return array_list;
以及从 DBHelper 获取数据的代码
DB = new DBHelper(this);
ArrayList<Map<String, String>> order = DB.getorder();
String ID;
String AddressID;
String PaymentTypeID;
String CustomerID;
try
if(order.size() = 0)
//database is empty
else
ID = order.get(0).get("ID");
AddressID = order.get(0).get("AddressID");
PaymentTypeID = order.get(0).get("PaymentTypeID");
CustomerID = order.get(0).get("CustomerID");
catch (IndexOutOfBoundsException e)
Toast.makeText(this,"ERROR IndexOutOfBoundsException :. "+ e ,Toast.LENGTH_LONG).show();
如果你有很多订单
你可以循环
for (int i= 0 ; i< order.size();i++)
ID_list = order.get(i).get("ID");
AddressID_list = order.get(i).get("AddressID");
PaymentTypeID_list = order.get(i).get("PaymentTypeID");
CustomerID_list = order.get(i).get("CustomerID");
我想你知道剩下的部分
希望对你有帮助
【讨论】:
以上是关于如何从android中的sqlite中检索数据的主要内容,如果未能解决你的问题,请参考以下文章
从 Android Studio 中的 SQLite 数据库中以字符串形式检索数据
如何从列表视图中从 sqlite 检索数据单击并查看不同的活动 android studio