Java 如何从SQLite表列中获取最大值并将其返回到MainActivity中的变量。安卓工作室
在DBHelper.java中创建表:Java 如何从SQLite表列中获取最大值并将其返回到MainActivity中的变量。安卓工作室,java,android,sqlite,android-sqlite,Java,Android,Sqlite,Android Sqlite,在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_WOD
@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" + ")");}
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();
}
}
。但是,由于您只有StringBuffer;
,因此尝试附加到它会导致空指针异常。您需要初始化缓冲区,例如使用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();
}
}
- 请参阅注释掉的查询,该查询使用COALESCE在返回的字符串中返回0而不是null(如果您不希望处理null)
@Override protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);dbHelper=new dbHelper(this);
之前才是这样,如果代码是错误的,那么末尾缺少一个}。
D/MAXNUMBER: null