有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java SQLite数据库在何处不能正确使用?

该应用程序的目的是根据用户选择的内容从数据库中获取训练,并将其放入一个碎片类的文本视图中。用户可以选择他们的体验,如果他们想使用权重。数据库存储与体验和重量相关的所有训练。例如,在我的数据库中,我可能有一项训练有(“初学者”、“无重量”、“倾斜俯卧撑”)。在应用程序结束时,数据库应该研究用户选择的值。例如,如果用户选择初学者,它应该只查找包含初学者的数据库条目。我希望数据库只返回训练。我正在使用Android Studio来实现这一点,并创建了数据库(以及填充了数据库),但我一直收到相同的错误。下面的第一个方法是在另一个类中,该类应根据数据库中的经验和体重偏好获取训练

    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
    安卓.database.sqlite.SQLiteException: no such column: beginner (code 1): , while compiling: SELECT _id, workout FROM exercises WHERE experience=beginner
        at 安卓.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at 安卓.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
        at 安卓.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
        at 安卓.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
        at 安卓.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
        at 安卓.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
        at 安卓.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
        at 安卓.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1318)
        at 安卓.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1165)
        at 安卓.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1036)
        at 安卓.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 安卓x.fragment.app.Fragment.performCreateView(Fragment.java:2698)
        at 安卓x.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
        at 安卓x.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
        at 安卓x.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
        at 安卓x.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
        at 安卓x.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
        at 安卓x.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
        at 安卓x.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
        at 安卓.os.Handler.handleCallback(Handler.java:751)
        at 安卓.os.Handler.dispatchMessage(Handler.java:95)
        at 安卓.os.Looper.loop(Looper.java:154)
        at 安卓.app.ActivityThread.main(ActivityThread.java:6119)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
        at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:776)

共 (1) 个答案

  1. # 1 楼答案

    您应该始终使用'beginner'而不是beginner作为您的值

    因此,一个简单的SQL语句应该如下所示:

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