Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.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
Java 如何从SQLite表列中获取最大值并将其返回到MainActivity中的变量。安卓工作室_Java_Android_Sqlite_Android Sqlite - Fatal编程技术网

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

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

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" + ")");}
  • 在MainActivity.javaonCreate中,将创建一些对象,这些对象将根据表的列键编号显示

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

  • 试着这样做:

        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();
    }
    
  • 获取RAW中的下一个错误:

    应为公共字符串getMaxNumber(){-“;”

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

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

    应为公共字符串getMaxNumber(){-“;”

    您缺少结束语
    }
    。但是,由于您只有
    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)

    我认为您必须尝试使用“+DBHelper.TABLE\u count,null”中的db.rawQuery(“选择MAX”(+DBHelper.KEY\u WONUMBER+”)方法,而不是db.query()

    第一个错误可能是由代码前面的错误引起的,而不是在那一行,另一个可能是因为第一个错误。我还想知道为什么在查询返回整数时读取字符串?不,前面的代码中没有任何错误。只有在
    @Override protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);dbHelper=new dbHelper(this);
    之前才是这样,如果代码是错误的,那么末尾缺少一个}。
    D/MAXNUMBER: null