【发布时间】:2015-08-27 05:41:14
【问题描述】:
我正在使用 Android Studio 制作一个简单的日志应用程序,用户可以在其中添加他们应该保存到 SQLite 数据库中的时间和注释。但是,当我尝试在 Android 设备监视器/文件资源管理器中查找数据库时,它没有出现在名为“data”的文件夹中(你们中的一个人建议应该保存它)。
在关于 SO 的问题中,还指出在执行 getWritableDataBase() 或 getReadableDataBase() 之前数据库不会出现。但是,即使我找不到它,数据文件夹仍然是空的。我试过卸载再安装,还是不行。
TimeListDataBaseHelper.java
public class TimeListDataBaseHelper {
public static final int DATABASE_VERSION=2;
public static final String DATABASE_NAME="TimeTracker.db",TABLE_NAME="time_records",TIMETRACKER_COLUMN_ID="id",TIMETRACKER_COLUMN_TIME="time",TIMETRACKER_COLUMN_NOTE="note";
private TimeTrackerOpenHelper timeTrackerOpenHelper;
public SQLiteDatabase database;
public TimeListDataBaseHelper(Context context)
{
timeTrackerOpenHelper=new TimeTrackerOpenHelper(context);
database=timeTrackerOpenHelper.getWritableDatabase();
}
private class TimeTrackerOpenHelper extends SQLiteOpenHelper
{
public TimeTrackerOpenHelper(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_NAME + "(" + TIMETRACKER_COLUMN_ID + " INTEGER PRIMARY KEY," + TIMETRACKER_COLUMN_TIME + " TEXT," + TIMETRACKER_COLUMN_NOTE + " TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
database.execSQL("DROP TABLE IF EXISTS" + TABLE_NAME);
onCreate(db);
}}
public void saveTimeRecord (String time,String notes)
{
ContentValues contentValues=new ContentValues();
contentValues.put(TIMETRACKER_COLUMN_TIME,time);
contentValues.put(TIMETRACKER_COLUMN_NOTE,notes);
database.insert(TABLE_NAME,null,contentValues);
}}
这是我认为与我的问题有关的 MainActivity.java 的一部分,问题是日志表明数据库已创建,因为我在日志之前写了一个 if 语句.d。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
timeListDataBaseHelper=new TimeListDataBaseHelper(this);
if(timeListDataBaseHelper.database!=null)
Log.d("tag","Data Base Created");
ListView listView=(ListView) findViewById(R.id.time_list);
timeTrackerAdapter=new TimeTrackerAdapter();
listView.setAdapter(timeTrackerAdapter);
}
【问题讨论】:
-
这里需要一个空格:
database.execSQL("DROP TABLE IF EXISTS" + TABLE_NAME);否则你的表不会被删除,也不会在onUpgrade()中重新创建。
标签: java android sqlite android-studio