如何从SQLite表列中获取最大值并将其返回到MainActivity中的变量.安卓工作室


  1. DBHelper.java中创建表:

    @Override
    public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table " + TABLE_WORKOUT + "("
    + KEY_ID + " INTEGER PRIMARY KEY,"
    + KEY_WONUMBER + " integer,"
    + KEY_WONAME + " text,"
    + KEY_WODESCRIPTION + " text,"
    + KEY_WOICON + " text,"
    + KEY_WOCOLOR + " text" + ")");}
    
  2. 在 MainActivity 中.javaonCreate将创建一些对象,这些对象将根据TABLE_WORKOUT列KEY_WONUMBER中的数字显示

  3. 需要在 KEY_WONUMBER 中找到最大值并将其交给 MainActivity 中的变量.java并为下一个对象设置下一个数字

  4. 尝试这样做:

    public String getMaxNumber(){
    SQLiteDatabase db = dbHelper.getWritableDatabase();
    Cursor c = db.query(DBHelper.TABLE_WORKOUT, new String[]
    {"MAX("+DBHelper.KEY_WONUMBER+")"},
    null, null, null, null, null);
    StringBuffer buffer;
    if(c.getCount()>0){
    c.moveToFirst();
    String max_id=c.getString(0);
    buffer.append(max_id);
    }
    c.close();
    db.close();
    return buffer.toString();
    }
    
  5. 在原始数据中获取下一个错误:

    public String getMaxNumber(({ - ';' 预期

    返回 buffer.toString((; - *无法从结果类型为 void 的方法返回值

作为Android的新手,需要您的帮助来解决这个问题

public String getMaxNumber(({ - ';' 预期

您缺少结束}。但是,然后引入缓冲区的修复可能尚未初始化错误,因为您只有StringBuffer buffer;因此尝试附加到它会导致空指针异常。您需要初始化缓冲区,例如使用StringBuffer buffer = new StringBuffer("");

return buffer.toString((; - *不能从结果类型为 void 的方法返回值

这是缺少关闭}的结果。请参阅上文如何将此错误替换为另一个错误。

修复

考虑以下代码和其中的注释:-

public class MainActivity extends AppCompatActivity {
DBHelper dbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbHelper = new DBHelper(this);
Log.d("MAXNUMBER", getMaxNumber());
} //<<<<<<<<<< FIX 1 closes the onCreate method
public String getMaxNumber () {
SQLiteDatabase db = dbHelper.getWritableDatabase();
Cursor c = db.query(DBHelper.TABLE_WORKOUT, new String[]
{"MAX(" + DBHelper.KEY_WONUMBER + ")"},
//{"COALESCE(MAX(" + DBHelper.KEY_WONUMBER + "),0)"}, //Alternative will return 0 instead of null if no rows
null, null, null, null, null);
StringBuffer buffer = new StringBuffer(""); //FIX2 initialize buffer by adding buffer = new StringBuffer("")
if (c.moveToFirst()) { // moveToFirst will return false if no row to move to so no need to check row count
String max_id = c.getString(0);
buffer.append(max_id); //FIX 1 introduces might not have been inittialized (buffer hasn't been inittialized)
}
c.close();
db.close(); // can be inefficient to keep on opening and closing the database
return buffer.toString();
}
}

这将返回(当没有插入任何行时(:-

D/MAXNUMBER: null
  • 请参阅注释掉的查询,如果您不想处理 null,则使用 COALESCE 在返回的字符串中返回 0 而不是 null。

我认为您必须尝试db.rawQuery("从"+DBHelper.TABLE_WORKOUT,null(方法中选择MAX("+DBHelper.KEY_WONUMBER+"(而不是db.query((

最新更新