Android 无法查询数据库中的最大数量
我试图在数据库中某个表的列中查找最大值 我想我已经把这个问题整理好了(我之前也发布过类似的问题),但是经过一些测试,我意识到我的代码并没有像我想的那样工作 数据库由具有以下列的表组成: _id、检查链接、区域编号、区域参考 我在我的数据库助手类中创建了以下代码:Android 无法查询数据库中的最大数量,android,database,cursor,max,Android,Database,Cursor,Max,我试图在数据库中某个表的列中查找最大值 我想我已经把这个问题整理好了(我之前也发布过类似的问题),但是经过一些测试,我意识到我的代码并没有像我想的那样工作 数据库由具有以下列的表组成: _id、检查链接、区域编号、区域参考 我在我的数据库助手类中创建了以下代码: public static final String AREAS_TABLE = "areas"; public static final String AREA_ID = "_id"; public static final Stri
public static final String AREAS_TABLE = "areas";
public static final String AREA_ID = "_id";
public static final String AREA_NUMBER = "area_number";
public static final String AREA_REF = "area_reference";
public static final String AREA_LINK = "area_link";
public static final String INSPECTION_LINK = "inspection_link";
public Cursor selectMaxAreaNumber (long inspectionId) {
String inspectionIdString = String.valueOf(inspectionId);
String[] tableColumns = new String[] {
AREA_NUMBER,
"(SELECT max(" + AREA_NUMBER + ") FROM " + AREAS_TABLE + ") AS max"
};
String whereClause = INSPECTION_LINK + " = ?";
String[] whereArgs = new String[] {
inspectionIdString
};
Cursor c = rmDb.query(AREAS_TABLE, tableColumns, whereClause, whereArgs,
null, null, null);
if (c != null) {
c.moveToFirst();
}
c.close();
return c;
}
然后在我要查询数据库的活动中,我编写了以下内容:
public class AreaEdit extends Activity {
private EditText AreaNumber;
private EditText AreaReference;
private Button saveButton;
private Button cancelButton;
protected boolean changesMade;
private AlertDialog unsavedChangesDialog;
private RMDbAdapter rmDbHelper;
private long inspectionId;
private long areaId;
private int nextAreaNumber = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
rmDbHelper = new RMDbAdapter(this);
rmDbHelper.open();
Intent i = getIntent();
inspectionId = i.getLongExtra("Intent_InspectionID", -1);
areaId = i.getLongExtra("Intent_AreaID", -1);
if (areaId == -1) {
Cursor c = rmDbHelper.selectMaxAreaNumber(inspectionId);
startManagingCursor(c);
c.moveToFirst();
nextAreaNumber = c.getInt(c.getColumnIndex("max")) + 1;
}
setContentView(R.layout.edit_area);
setUpViews();
populateFields();
setTextChangedListeners();
}
private void setUpViews() {
AreaNumber =(EditText)findViewById(R.id.area_number);
AreaReference =(EditText)findViewById(R.id.area_reference);
saveButton = (Button)findViewById(R.id.area_save_button);
cancelButton = (Button)findViewById(R.id.area_cancel_button);
}
private void populateFields() {
if (areaId > 0) {
Cursor c = rmDbHelper.fetchArea(areaId);
startManagingCursor(c);
c.moveToFirst();
AreaNumber.setText(c.getString(
c.getColumnIndexOrThrow(RMDbAdapter.AREA_NUMBER)));
AreaReference.setText(c.getString(
c.getColumnIndexOrThrow(RMDbAdapter.AREA_REF)));
c.close();
}
else {
AreaNumber.setText(String.valueOf(nextAreaNumber));
}
}
但是,当它返回错误的数字时,它似乎从整个表中获取了最大数字,其中包括来自其他检查的数据
我想这可能是因为弦和长等之间的转换,但我有一个砖墙
非常感谢您的帮助。您只需尝试以下内容:
String sql = "SELECT MAX(ColumnNameHere) AS MaxValue FROM myTable WHERE AnotherColumn = 'SomValue'";
Cursor c = db.rawQuery(sql, null);
c.moveToFirst();
c.getInt(c.getColumnIndex("MaxValue"));
此问题的详细解决方案如下: 以下帖子详细介绍了解决方案:
基本上,这是一个与我所想的查询以及如何使用光标有关的问题。有人建议我使用更复杂的数据库查询,如图所示,它肯定会做同样的事情?不过,我确实采纳了你略有不同的SELECT语句,并对我的语句进行了修改以匹配,看看这是否有效,但没有成功。我试图理解为什么我的不起作用-你知道是SELECT语句吗?