我对 Android 和 stackoverflow 还是很陌生,这是我的第一个问题……我希望你能帮助我。
我必须在 sqlite db 的基础上创建一个应用程序,其中包含 id、category.... 和步骤等列。步骤列的最大值为 1 到 16,并命名为 step1 到 step16,但并非所有条目都填充了所有步骤。
所以例如第一条记录只有 step1 到 step6 填充了一些字符串值,第二条记录可能有 step1 到 step10 等等。
现在我试图找出实际上有一个值的最大步数......它总是崩溃
12-20 15:45:41.038: DEBUG/AndroidRuntime(1243): Shutting down VM
12-20 15:45:41.038: WARN/dalvikvm(1243): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
12-20 15:45:41.044: ERROR/AndroidRuntime(1243): FATAL EXCEPTION: main
12-20 15:45:41.044: ERROR/AndroidRuntime(1243): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.lochmann.zaubertricks/de.lochmann.zaubertricks.TrickExplanation}: java.lang.NullPointerException: println needs a message
我已经尝试了很多东西,目前我被困在这里:
public int getMaxSteps(int id) {
int step=1;
String query="SELECT step"+Integer.toString(step)+" FROM "+DB_NAME+" WHERE _id="+id;
Cursor myCursor = myDataBase.rawQuery(query,null);
while(myCursor.moveToFirst()) {
if (myCursor.getString(0)!=null) {
step++;
query="SELECT step"+Integer.toString(step)+" FROM "+DB_NAME+" WHERE _id="+id;
myCursor = myDataBase.rawQuery(query,null);
}
}
return step;
}
基本上我正在寻找名称为 step+x 的列,如果它存在并且不为空,我会增加 step 并重新开始。工作,但它不会停止在 myCursor.getString(0)!=null。我也放了 try catch 块,但无济于事。
任何建议,或任何其他方式来完成我正在寻找的东西?有可能我错过了一些基本原则......
所以记录可能看起来像:
ID Name Description Step1 Step2 Step3 Step4 Step5 Step6 Step7 ... Step16
1 Test Foo test test test test test test - -
在我们的例子中,getMaxSteps(1) 方法应该返回一个 6,因为这是最后一个有值的单元格。
日志谈论的未捕获异常可能是什么?
ps:我知道这是一个非常糟糕的数据库设计,它不是我的,我只需要使用它。
很长的第一篇文章,我希望你能帮助我:)
问候马丁
最佳答案
据我所知,当你对一个不存在的列进行查询时,你会得到一个数据库异常。但是,我不确定为什么您没有在日志中获得正确的堆栈转储。只要您对不存在的列进行查询,它就会抛出。这是你所期望的吗?
我会做的是做一个 select *
查询,然后查看返回的列。也许是这样的:
String query = "SELECT * FROM " + DB_NAME + " WHERE _id=" + id;
Cursor myCursor = myDataBase.rawQuery(query, null);
if (! myCursor.moveToFirst()) {
// no results
return 0;
}
for (int i = 1; i < 1000; i++) {
int index = cursor.getColumnIndex("step" + i);
if (index < 0) {
return i - 1;
}
}
throw new IllegalStateException("Something is wrong and we'll be careful");
这将使您免于进行更昂贵的多次查询。
关于java - 安卓、SQL : how to find out if existing column has a value?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8578582/