2012-10-30 57 views
1

我想從我的視圖中獲取一些數據,並在我的Android應用程序中輸入我的SQLite數據庫。如何將條目插入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 .....線,它工作得很好,但是當我試圖插入變量與存儲的值,它不。任何想法?

這是一個Android 2.3應用程序被寫入在Eclipse朱諾。

+4

人們志願幫助你,你應該通過閱讀你以前的問題來「回報」他們,以積極回答任何有用的答案並接受最好的答案。對於這個問題,你只需要用變量正確地構建你的'execSQL()'字符串。 – Sam

+2

完全同意@Sam在這裏!我會給你一個小費,打印出你的聲明,並檢查你實際嘗試插入數據庫的內容。 – Araw

回答

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); 

也是另一種不錯的做法是將所有你的 表名稱和列名稱給常量並使用這些常量引用它們。

1

您的db.execSQL查詢也可以對其進行一些修改。

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

自己做錯了什麼,你正在做的是傳遞變量,如startYear等,其中被視爲字符串,而不是它的值雙引號。所以你的最終查詢字符串生成並執行結果爲

INSERT INTO學期值(sessionName,startYear,startMonth,startDay,endYear,endMonth,endDay);

因此它失敗,因爲這不是有效的查詢。