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 等,它被视为字符串而不是它的值。所以你最终生成和执行的查询字符串结果是

插入学期值(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 回答