1

ビューからデータを取得し、Android アプリの SQLite データベースにエントリを作成しようとしています。

    SQLiteDatabase db = openOrCreateDatabase("SemesterDB", MODE_PRIVATE, null);
    db.execSQL("CREATE TABLE IF NOT EXISTS Semesters (Session VARCHAR, YearStart INT," +
            " MonthStart INT, DayStart INT,YearEnd INT, MonthEnd INT, DayEnd INT )");

    //extract session from view
    Spinner sessionSpinner = (Spinner) findViewById(R.id.sessionSpinner);
    String session = (String) sessionSpinner.getSelectedItem();

    //extract start date from view
    DatePicker startDatePicker = (DatePicker) findViewById(R.id.semesterStartDate);
    int startDay = startDatePicker.getDayOfMonth();
    int startMonth = startDatePicker.getMonth();
    int startYear = startDatePicker.getYear();

    //extract end date from view
DatePicker endDatePicker = (DatePicker) findViewById(R.id.semesterEndDate);
    int endDay = startDatePicker.getDayOfMonth();
    int endMonth = startDatePicker.getMonth();
    int endYear = startDatePicker.getYear();

    String sessionName = (String) session+" "+startYear;

    db.execSQL("INSERT INTO Semesters VALUES(sessionName,startYear,startMonth,startDay,endYear,endMonth,endDay);");
    db.close(); 

--したがって、値を db.execSQL("INSERT..... 行にハードコーディングすると、うまく機能しますが、保存された値で変数をプラグインしようとすると、うまくいきません。何かアイデアはありますか?

これは、Eclipse Juno で作成された Android 2.3 アプリケーション用です。

4

2 に答える 2

1

あなたの db.execSQL クエリは、それにいくつかの変更を加えることでも機能します。

    db.execSQL("INSERT INTO Semesters VALUES(" +
    sessionName + "," +
    startYear + "," +
    startMonth + "," +
    startDay + "," +
    endYear + "," +
    endMonth + ","
    endDay + ");");

あなたがしているのは、その値ではなく文字列として扱われる二重引用符で startYear などの変数を渡すことです。したがって、生成および実行された最終的なクエリ文字列は、

INSERT INTO セメスター VALUES(sessionName,startYear,startMonth,startDay,endYear,endMonth,endDay);

したがって、これは有効なクエリではないため、失敗します。

于 2012-10-30T18:59:33.943 に答える
0

これを試してみてください。挿入を行うより良い方法です。

    ContentValues cv = new ContentValues();
    cv.put("Session" , sessionName);
    cv.put("YearStart" , startYear);
    cv.put("MonthStart" , startMonth);
    cv.put("DayStart" , startDay);
    cv.put("YearEnd" , endYear);
    cv.put("MonthEnd" , endMonth);
    cv.put("DayEnd" , endDay);


    long rowID = db.insertOrThrow("Semesters", null, cv);

また、すべてのテーブル名と列名を定数に移動し、それらの定数を使用してそれらを参照することもお勧めします。

于 2012-10-30T18:46:49.943 に答える