2017-06-04 36 views
2

我正在學習編碼,並製作了一個秒錶,它將字符串保存在字符串中,並將日期也作爲字符串來獲取。我想把它們放在一個SQLite數據庫中(這樣我以後可以在一個listview中顯示日期,並在另一個顯示所有laptimes的活動中打開它)。我已經在互聯網上跟蹤了一些代碼並嘗試將這些代碼放在一起所以我可能會查看我的代碼中的一些內容。我已經評論了我認爲我理解的部分,所以你可以按照我的想法做一點。Android Java SQLite數據庫:數據庫不需要2個字符串輸入

問題:當我按下保存下面的代碼執行並返回toastmessage:Somehting出錯了。

save.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       String dateStamp = getCurrentTimeStamp(); 
       AddData(dataInput, dateStamp); 
       //DatabaseHelper.deleteAll(); 
      } 
     }); //save data though AddData method as input the listText 

的方法addData爲如下:

public void AddData(String time, String date) { 
     boolean insertData = DatabaseHelper.addData(time, date); 

     if (insertData) { 
      toastMessage(dataInput); 
     } else { 
      toastMessage("Something went wrong"); 
     } 
    } 

在DatabaseHelper類布爾方法是這樣的:

public boolean addData(String times, String date) { //addData that takes a string 
     SQLiteDatabase db = this.getWritableDatabase(); //database called db and use getWritableDatabase method 
     ContentValues contentValues = new ContentValues(); //make a new object of ContentValues 
     contentValues.put(COL_2, times); //put COL_2 and the String in the ContentValues object 
     contentValues.put(COL_3, date); 

      long result = db.insert(TABLE_NAME, null, contentValues); //insert contentValues object into the table 
     //if date as inserted incorrectly it will return -1 
     if (result == -1) { 
      db.close(); 
      return false; 
     } else { 
      return true; 
     } 

    } 

它的工作原理,當我在addData輸入只是1個變量()但是不是我以後實施的2。我認爲它應該工作。下面我還將用於製作SQLite數據庫的代碼放入其中。

public static final String TABLE_NAME = "stopwatch"; //make a table with name 
    public static final String COL_1 = "ID"; //make an ID for every colomn 
    public static final String COL_2 = "times"; //make a 2nd colomn for data 
    public static final String COL_3= "date"; 

    public DatabaseHelper(Context context) { 
     super(context, TABLE_NAME, null, 1); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { //make the onCreate method that takes the database as input 
     String createTable = "CREATE TABLE " + TABLE_NAME + " (" + COL_1 + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
       COL_2 +" TEXT" + COL_3 +" TEXT)"; //create the table with SQL statements to input the data correctly 
     db.execSQL(createTable); //input the SQL statements in the DB 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //make upgrade method that takes the database and the versions 
     db.execSQL("DROP IF TABLE EXISTS " + TABLE_NAME); //execute SQL statements drop table and which one 
     onCreate(db); //run through create method 
    } 

我希望有人能幫助我找到問題,以便我可以瞭解更多。

+0

SQL語句是'DROP TABLE IF EXISTS .....''DROP IF TABLE EXISTS ....' – Titus

+0

謝謝!我已經從另一個代碼中複製了這些內容,並試圖查看不同的內容,但作爲初學者,我仍然錯過了那些小東西 – Tmen

回答

1

您創建表查詢的COL_2 +" TEXT"

@Override 
public void onCreate(SQLiteDatabase db) { 
    String createTable = "CREATE TABLE " + TABLE_NAME + " (" + COL_1 + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
      COL_2 +" TEXT, " + COL_3 +" TEXT)"; // Added a comma after the COL_2 
    db.execSQL(createTable); 

} 
+0

謝謝!那確實是問題的一部分。 – Tmen

0

後缺少一個逗號,我可以從看一眼看到一個問題,那就是在你創建語句缺少逗號這意味着沒有創建數據庫如你所願。嘗試下面的修改。

String createTable = "CREATE TABLE " + TABLE_NAME + " (" + COL_1 + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
      COL_2 +" TEXT," + COL_3 +" TEXT)";