2012-10-21 129 views
3

我正在做一個使用Android的時間表應用程序。我是初學者,對數據庫編程知之甚少。如何解決錯誤代碼= 1,msg =接近「,」:語法錯誤android中的sqlite

下面是我對我使用的數據庫代碼:

public class TsData{ 

    private static final String TS_DATABASE = "timesheetdb"; 
    private static final int DATABASE_VERSION = 1; 
    private static final String TS_TABLE = "database"; 

    public static final String ROW_ID = BaseColumns._ID; 
    public static final String PROJ_NAME = "projname"; 
    public static final String START_TIME = "stime"; 
    public static final String DATE = "date"; 
    public static final String STOP_TIME=""; 
    public static final String ACT_NAME = "actname"; 
    public static final String TOTAL_TIME = "ttime"; 

    private DBhelper ourHelper; 
    private final Context ourContext; 
    private SQLiteDatabase ourDataBase; 

    private static class DBhelper extends SQLiteOpenHelper{ 
     public DBhelper(Context context) { 
      super(context, TS_DATABASE, null, DATABASE_VERSION); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 
      String sql = "CREATE TABLE " + TS_TABLE + "(" + ROW_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
       + ACT_NAME + " TEXT NOT NULL, " 
       + DATE + " TEXT NOT NULL, " 
       + START_TIME + " TEXT NOT NULL, " 
       + STOP_TIME + " TEXT NOT NULL" + ");"; 
      db.execSQL(sql); 
     } 


     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      db.execSQL("DROP TABLE IF EXISTS " + TS_TABLE); 
      onCreate(db); 
     } 
    } 

    public TsData(Context c){ 
     ourContext=c; 
    } 

    public TsData open()throws SQLException{ 
     ourHelper = new DBhelper(ourContext); 
     ourDataBase = ourHelper.getWritableDatabase(); 
     return this; 
    } 

    public void close(){ 
     ourHelper.close(); 
    } 

    public long insertEntry(String act_name2, String startDate, String startTime, String stopTime) { 
     ContentValues values = new ContentValues(); 
     values.put(ACT_NAME, act_name2); 
     values.put(DATE, startDate); 
     values.put(START_TIME, startTime); 
     values.put(STOP_TIME, stopTime); 
     System.out.println("record inserted"); 
     return ourDataBase.insert(TS_TABLE, null, values); 
    } 

    public String getData() { 
     // TODO Auto-generated method stub 
     String[] columns = new String[]{ROW_ID, ACT_NAME, DATE, START_TIME, STOP_TIME}; 
     Cursor cr = ourDataBase.query(TS_TABLE, columns, null, null, null, null, null); 
     String result=""; 

     int iRow=cr.getColumnIndex(ROW_ID); 
     int iName=cr.getColumnIndex(ACT_NAME); 
     int istartTime=cr.getColumnIndex(START_TIME); 
     int istopTime=cr.getColumnIndex(STOP_TIME); 
     int iDate=cr.getColumnIndex(DATE); 

     for(cr.moveToFirst();!cr.isAfterLast();cr.moveToNext()) { 
      result=result+cr.getString(iRow)+" " 
       +cr.getString(iName)+" " 
       +cr.getString(iDate)+" " 
       +cr.getString(istartTime)+" " 
       +cr.getString(istopTime)+"\n"; 
     } 
     return result; 
    } 

    public void deleteEntry(long rowNo) { 
     // TODO Auto-generated method stub 
     ourDataBase.delete(TS_TABLE, ROW_ID + "=" + rowNo, null); 
    } 
} 

但是當我插入表中的記錄,我收到以下錯誤:

10-21 20: 33:11.044:我/數據庫(6597):sqlite返回:錯誤代碼= 1,msg =接近「,」:語法錯誤

我已經double檢查所有的語法,但沒有得到任何解決方案。

+0

你有沒有印出來的CREATE語句在SQL變量的值?什麼查詢失敗?是否有任何參數包含逗號? – Smith

+0

手動編寫SQL查詢非常容易出錯。使用ormlite代替:http://stackoverflow.com/questions/6645665/what-is-a-good-tutorial-for-using-ormlite-with-sqlite-and-android – alehro

+0

我格式化了你的代碼,所以它變得很多更具可讀性。 – Styxxy

回答

1

public static final String STOP_TIME =「」; ??? 對STOP_TIME使用一些值。

CREATE TABLE TS_TABLE ( ROW_ID INTEGER PRIMARY KEY AUTOINCREMENT, 
     ACT_NAME TEXT NOT NULL, 
     DATE TEXT NOT NULL, 
     START_TIME TEXT NOT NULL); 
+0

已更改爲public static final String STOP_TIME =「stptime」; 但現在得到此錯誤 10-21 21:37:23.674:我/數據庫(6678):sqlite返回:錯誤代碼= 1,msg =表數據庫沒有名爲stptime的列 – user1763193

+0

表創建成功嗎?讀取,更新,創建和刪除這個新問題時,您正在做什麼操作? – rahul

+0

此外,請嘗試給表格專用名稱。你的表名「數據庫」是一個不好的名字。根據定義,數據庫是一組表。 – rahul

相關問題