2017-08-11 211 views
0

我想在android中創建一個簡單的數據庫,但數據庫沒有創建,我不知道爲什麼。我讀了很多解決方案,但沒有任何幫助Android數據庫中的SQLite數據庫不會創建

這是SQLiteOpenHelper擴展分類

public class TodoDB extends SQLiteOpenHelper { 
    public static final int DATABASE_VERSION = 1; 
    public static final String DATABASE_NAME = "todo.db"; 

    public TodoDB(android.content.Context context){ 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 
    @Override 
    public void onCreate(SQLiteDatabase sqLiteDatabase) { 
     String query = "CREATE TABLE "+ TaskSchema.TaskColumns.TABLE_NAME + "(" + 
       TaskSchema.TaskColumns.ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
       TaskSchema.TaskColumns.TITLE + " TEXT NOT NULL, " + 
       TaskSchema.TaskColumns.INFORMATION + " TEXT NOT NULL, " + 
       TaskSchema.TaskColumns.DATE + " TEXT NOT NULL " + 
       ");"; 
     sqLiteDatabase.execSQL(query); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { 

    } 

    public void addTask() 
    { 
     ContentValues values = new ContentValues(); 
     values.put(TaskSchema.TaskColumns.TITLE, "l"); 
     values.put(TaskSchema.TaskColumns.INFORMATION, "temporal"); 
     values.put(TaskSchema.TaskColumns.DATE,"20-8-16"); 
     this.getWritableDatabase().insert(TaskSchema.TaskColumns.TABLE_NAME,null,values); 
    } 

    public String getTask() 
    { 
     String args[] = {"l"}; 
     String columns[] = {TaskSchema.TaskColumns.TITLE}; 
     Cursor c = this.getReadableDatabase().query(TaskSchema.TaskColumns.TABLE_NAME,columns, TaskSchema.TaskColumns.TITLE + " LIKE ?",args,null,null,null); 
     String result = c.getString(c.getColumnIndex(TaskSchema.TaskColumns.TITLE)); 
     return result; 
    } 

} 

這是活動類

public class MainActivity extends AppCompatActivity { 

    Button addButton; 
    Button deleteButton; 
    TodoDB db; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     addButton = (Button)findViewById(R.id.addButton); 
     TodoDB db = new TodoDB(this); 
     db.addTask(); 
     String test = db.getTask(); 
     Toast.makeText(this, test,Toast.LENGTH_SHORT); 
    } 
} 

普萊斯幫助。

額外信息:我使用Android監視器來查找數據庫,但不在虛擬設備中,我在手機中運行應用程序,當我查找數據庫時,它不存在。當我試圖做一個查詢應用程序關閉。

+0

你怎麼知道數據庫沒有被創建? – lelloman

+0

嘗試在查詢結尾處添加分號(;)。 查詢現在應該是這樣: 串查詢= 「CREATE TABLE 」+ TaskSchema.TaskColumns.TABLE_NAME + 「(」 + TaskSchema.TaskColumns.ID +「 INTEGER PRIMARY KEY AUTOINCREMENT,」 + TaskSchema.TaskColumns.TITLE +「TEXT NOT NULL,「+ TaskSchema.TaskColumns.INFORMATION +」TEXT NOT NULL「,+ TaskSchema.TaskColumns.DATE +」TEXT NOT NULL「+ 」);「; –

+0

@lelloman我使用Android監視器來查找數據庫,但不在虛擬設備中,我在手機中運行應用程序,並且在查找數據庫時它不存在。當我試圖做一個查詢應用程序關閉。 –

回答

-1

我不知道你以前做過什麼。試圖創建此表之前,您是否創建了任何其他表?如果是,則SQLite中的onCreate()方法僅在您第一次調用實現它的類時調用。嘗試刪除您的應用,然後重新安裝。或

+0

相同,並且從不創建數據庫。 –

1
TodoDB db = new TodoDB(this); 

實例化SQLiteOpenHelper不會創建一個數據庫文件之前給你做了什麼其他一些細節。您需要調用getWritableDatabase()getReadableDatabase()來創建數據庫文件。例如:

TodoDB openHelper = new TodoDB(this); 
SQLiteDatabase db = openHelper.getWritableDatabase(); 
+0

我必須把它放在哪裏? –

+0

以示例更新了答案 – laalto