簡體   English   中英

SQLite 數據庫無法正確使用 WHERE?

[英]SQLite database won't use WHERE properly?

這個應用程序的目的是根據用戶選擇的內容從數據庫中獲取鍛煉,並將它們放入零碎的 class 中的 textview 中。 用戶可以 select 他們的經驗以及如果他們想使用權重。 數據庫存儲與經驗和重量相關的所有鍛煉。 例如,在我的數據庫中,我可能有一個包含(“初學者”、“無重量”、“傾斜俯卧撐”)的鍛煉。 在應用程序結束時,數據庫應該研究用戶選擇的值。 例如,如果這是用戶選擇的,它應該只查找具有初學者的數據庫條目。 我希望數據庫只返回鍛煉。 我為此使用 Android Studio,並創建了數據庫(以及填充它),但我一直收到同樣的錯誤。 下面的第一種方法是在另一個 class 中,它應該通過數據庫中的經驗和體重偏好來獲得鍛煉。

    public ArrayList<String> getWorkoutByBeginnerAndNoWeights(){

        Cursor cursor = database.query(MySQLiteHelper.TABLE_EXERCISES, workoutColumns, MySQLiteHelper.COLUMN_EXPERIENCE + "=" + "beginner" + "AND" + "" + MySQLiteHelper.COLUMN_EQUIPMENT + "=" + "no weights", null, null, null, null);
        while(!cursor.isLast()){
            int i=0;
            String workouts =cursor.getString(i++);
            workoutArray.add(workouts);

        }

        //return string array
        return workoutArray;
    }


----------
Class for making the database

public class MySQLiteHelper extends SQLiteOpenHelper {

    public static final String TABLE_EXERCISES = "exercises";
    public static final String COLUMN_ID = "_id";
    public static final String COLUMN_EXPERIENCE = "experience";
    public static final String COLUMN_EQUIPMENT = "equipment";
    public static final String COLUMN_WORKOUT = "workout";
    public static final String DATABASE_NAME = "exercises.db";
    private static final int DATABASE_VERSION = 1;

    // Database creation sql statement
    private static final String DATABASE_CREATE = "create table "
            + TABLE_EXERCISES + "(" + COLUMN_ID
            + " integer primary key autoincrement, "+ COLUMN_EXPERIENCE + " text not null,  " + COLUMN_EQUIPMENT
            + " text not null, "+ COLUMN_WORKOUT
            + " text not null);";

    public MySQLiteHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase database) {
        database.execSQL(DATABASE_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w(MySQLiteHelper.class.getName(),
                "Upgrading database from version " + oldVersion + " to "
                        + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_EXERCISES);
        onCreate(db);
    }

}


-------
Code in fragment to display it as a text using textView
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View inf = inflater.inflate(R.layout.fragment_test, container, false);
        TextView tv = (TextView) inf.findViewById(R.id.testText);
        tv.setText(MainActivity.dataSource.getWorkoutByBeginnerAndNoWeights().toString());
        // Inflate the layout for this fragment
        return inf;
    }


----------
error I am getting
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.hfad.workoutmaker, PID: 20245
    android.database.sqlite.SQLiteException: no such column: beginner (code 1): , while compiling: SELECT _id, workout FROM exercises WHERE experience=beginner
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
        at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
        at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
        at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1318)
        at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1165)
        at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1036)
        at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1204)
        at com.hfad.workoutmaker.WorkoutsDataSource.getWorkoutByBeginnerAndNoWeights(WorkoutsDataSource.java:74)
        at com.hfad.workoutmaker.TestFragment.onCreateView(TestFragment.java:41)
        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
        at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
        at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6119)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

您應該始終使用'beginner'而不是beginner作為您的價值。

所以一個簡單的 SQL 語句應該如下所示:

SELECT * FROM `Table` WHERE `ID`='1'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM