2016-03-28 49 views
-1

我試着去創建一個表名「知識」sSQLITE查詢創建表不工作

以下是我的查詢,

private static final String CREATE_KNOWLEDGE_STATUTORY = "CREATE TABLE " + TABLE_KNOWLEDGE_STATUTORY + "(" 
      + KEY_ID + " INTEGER PRIMARY KEY," 
      + KEY_STATUTORY_MAPPING + " TEXT," 
      + KEY_LOCATION + " TEXT," 
      + KEY_DESCRIPTION + " TEXT," 
      + KEY_ACTIVE + " TEXT," 
      + KEY_PROVISION + " TEXT," 
      + KEY_COMPLIANCE_TASK + " TEXT," 
      + KEY_FORMAT_FILE_LIST + " TEXT," 
      + KEY_DURATION + " TEXT," 
      + KEY_DOC_NAME + " TEXT," 
      + KEY_PENAL_CONSEQUENCE + " TEXT," 
      + KEY_DURATION_ID + " TEXT," 
      + KEY_FREQUENCY_ID + " INTEGER," 
      + KEY_REPEAT_FREQ + " TEXT," 
      + KEY_COMPLIANCE_ID + " INTEGER," 
      + KEY_REPEAT_TYPE_ID + " TEXT," 
      + KEY_STATUTORY_MONTH + " TEXT," 
      + KEY_STATUTORY_DATE + " TEXT," 
      + KEY_TRIGGER_DATE + " TEXT," 
      + KEY_REPEAT_BY + " TEXT" + ");"; 

以下是我的方法,我用它來創建它,

public void addStatutory(StatutoryModel statutoryModel) { 

     SQLiteDatabase sqLiteDatabase = this.getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 

     contentValues.put(KEY_ID, statutoryModel.getId()); 
     contentValues.put(KEY_STATUTORY_MAPPING, statutoryModel.getStatuoryMapping()); 
     contentValues.put(KEY_LOCATION, statutoryModel.getLocation()); 
     contentValues.put(KEY_DESCRIPTION, statutoryModel.getDescription()); 
     contentValues.put(KEY_ACTIVE, statutoryModel.getIsStatutoryActive()); 
     contentValues.put(KEY_PROVISION, statutoryModel.getStatutoryProvision()); 
     contentValues.put(KEY_COMPLIANCE_TASK, statutoryModel.getComplianceTask()); 
     contentValues.put(KEY_FORMAT_FILE_LIST, statutoryModel.getFormat_fileList()); 
     contentValues.put(KEY_DURATION, statutoryModel.getDuration()); 
     contentValues.put(KEY_DOC_NAME, statutoryModel.getDocument_name()); 
     contentValues.put(KEY_PENAL_CONSEQUENCE, statutoryModel.getPenalConsequences()); 
     contentValues.put(KEY_DURATION_ID, statutoryModel.getDurationType_id()); 
     contentValues.put(KEY_FREQUENCY_ID, statutoryModel.getFrequencyId()); 
     contentValues.put(KEY_REPEAT_FREQ, statutoryModel.getRepeatsEvery()); 
     contentValues.put(KEY_COMPLIANCE_ID, statutoryModel.getComplianceId()); 
     contentValues.put(KEY_REPEAT_TYPE_ID, statutoryModel.getRepeatsTypeId()); 
     contentValues.put(KEY_STATUTORY_MONTH, statutoryModel.getStatutory_month()); 
     contentValues.put(KEY_STATUTORY_DATE, statutoryModel.getStatutory_date()); 
     contentValues.put(KEY_TRIGGER_DATE, statutoryModel.getTrigger_before_days()); 
     contentValues.put(KEY_REPEAT_BY, statutoryModel.getRepeat_by()); 

     sqLiteDatabase.insert(TABLE_KNOWLEDGE_STATUTORY,null,contentValues); 
     sqLiteDatabase.close(); 
    } 

林調用它作爲

DbHandler dbHandler = new DbHandler(getActivity()); 
dbHandler.addStatutory(new StatutoryModel(i, dbDesc, isStatutoryActive, statutoryProvision, complianceTask, format_fileList, duration, penalConsequences, document_name, durationType_id, frequencyId, repeatsEvery, repeatsTypeId, complianceId, statutory_month, statutory_date, trigger_before_days, repeat_by, compDescription, dbLoc)); 

問題是,我得到像沒有這樣的表存在錯誤。以下是我的錯誤日誌。

沒有這樣的表:知識03-28 15:58:48.584 28428-28428 /? E/SQLiteDatabase:錯誤插入repeatsEvery = NULL DOCUMENT_NAME = NULL 位置=印度>>南statutoryProvision =法定條文 2603161717 statutory_month = NULL statutoryMapping =符合 說明2603161717 statutory_date = NULL repeatsTypeId = NULL 時間= NULL frequencyId = 1 _id = 1 repeat_by = DAYOFMONTH complianceId = 26 penalConsequences = complianceTask =符合任務2603161717-1 trigger_before_days = null描述=主要立法 2503161026 >>次級立法2603161717 format_fileList = NULL durationType_id = NULL isStatutoryActive =真 android.database.sqlite.SQLiteException :沒有這樣的表格:知識 (代碼1):,當編譯時:INSERT INTO 知識(repeatsEvery,document_name,location,statutoryProvision,statutory_month,statutoryMapping,statutory_date,repeatsTypeId,duration,frequencyId,_id,repeat_by,complianceId,penalConsequences,complianceTask,trigger_before_days,description,format_fileList,durationType_id,isStatutoryActive) VALUES在android.database.sqlite.SQLiteConnection上使用(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)) .nativePrepareStatement(本地 法)

在沒有辦法,這個問題是重複的,因爲它得到了由CL標記爲重複的,因爲問題onUpgrade但在該應用中無需沖洗以前的數據運行的方式是不

+1

'沒有這樣的桌子:知識' –

+2

顯示完整的代碼並參見http://www.androidhive.info/2011/11/android-sqlite-database-tutorial/ –

+0

您是否有信心擁有這張桌子:知識你的sqlite數據庫。 如果不是,那麼在你的類文件中你已經用SQLIteOpeHelper在那個類文件中擴展它,你會發現onCreate方法,因爲你必須先創建你的表,只有在你可以插入數據之後。 –

回答

0

嘿我發現表創建定義中的語法錯誤。

您必須在常量TABLE_KNOWLEDGE_STATUTORY後添加一個額外的空格,以便括號與表名分開。

你創建表的定義應類似於以下之一:

private static final String CREATE_KNOWLEDGE_STATUTORY = "CREATE TABLE " + TABLE_KNOWLEDGE_STATUTORY + " (" 
     + KEY_ID + " INTEGER PRIMARY KEY," 
     + KEY_STATUTORY_MAPPING + " TEXT," 
     + KEY_LOCATION + " TEXT," 
     + KEY_DESCRIPTION + " TEXT," 
     + KEY_ACTIVE + " TEXT," 
     + KEY_PROVISION + " TEXT," 
     + KEY_COMPLIANCE_TASK + " TEXT," 
     + KEY_FORMAT_FILE_LIST + " TEXT," 
     + KEY_DURATION + " TEXT," 
     + KEY_DOC_NAME + " TEXT," 
     + KEY_PENAL_CONSEQUENCE + " TEXT," 
     + KEY_DURATION_ID + " TEXT," 
     + KEY_FREQUENCY_ID + " INTEGER," 
     + KEY_REPEAT_FREQ + " TEXT," 
     + KEY_COMPLIANCE_ID + " INTEGER," 
     + KEY_REPEAT_TYPE_ID + " TEXT," 
     + KEY_STATUTORY_MONTH + " TEXT," 
     + KEY_STATUTORY_DATE + " TEXT," 
     + KEY_TRIGGER_DATE + " TEXT," 
     + KEY_REPEAT_BY + " TEXT" + ");"; 

在你的表定義的表沒有正確地建立,所以很明顯的「沒有這樣的表」錯誤升高,當你試圖插入一個新的紀錄。

+1

SQL在這個地方不需要空間。 –

-1

我不認爲你發佈了正確的錯誤信息。這是嘗試插入時出現的錯誤,而不是失敗的創建表中的錯誤。你甚至在任何地方執行查詢CREATE_KNOWLEDGE_STATUTORY

看看你的創建表,問題可能是最後的;。從Java執行SQL時,不包括;。我認爲它會給出一個錯誤,如'無效字符'。

+0

內,我這樣做'db.execSQL(CREATE_KNOWLEDGE_STATUTORY); ' –

+0

我試過刪除';'但問題仍然存在 –

+0

SQL標準需要分號; SQLite使其成爲可選項。 –

0

確保您是否通過調用db.execSQL(CREATE_KNOWLEDGE_STATUTORY)創建了您的表;在你的onCreate()方法的DbHandler類?

+0

是在我的onCreate方法中,我調用了'db.execSQL(CREATE_KNOWLEDGE_STATUTORY); ' –