Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法查询数据库中的最大数量_Android_Database_Cursor_Max - Fatal编程技术网

Android 无法查询数据库中的最大数量

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

我试图在数据库中某个表的列中查找最大值

我想我已经把这个问题整理好了(我之前也发布过类似的问题),但是经过一些测试,我意识到我的代码并没有像我想的那样工作

数据库由具有以下列的表组成:

_id、检查链接、区域编号、区域参考

我在我的数据库助手类中创建了以下代码:

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语句吗?