我正在尝试从我的View中获取一些数据,并在我的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应用程序。
答案 0 :(得分:1)
您的db.execSQL查询也可以对其进行一些修改。
db.execSQL("INSERT INTO Semesters VALUES(" +
sessionName + "," +
startYear + "," +
startMonth + "," +
startDay + "," +
endYear + "," +
endMonth + ","
endDay + ");");
你做的错误是将变量如startYear等传递给双引号,它被视为String而不是它的值。因此,生成并执行的最终查询字符串结果为
INSERT INTO Semesters VALUES(sessionName,startYear,startMonth,startDay,endYear,endMonth,endDay);
因此失败,因为这不是有效的查询。
答案 1 :(得分: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);
另一个好的做法是将所有表名和列名移动到常量并使用这些常量引用它们。