我相信使用以下代码,我可以创建数据库,创建表,并在其中插入传感器值。
这一行创建一个db - > super(context," sensor.sqlite",null,1); 在data / data / example.com.sensor / databases / sensor.sqlite
中在oncreate方法中,创建一个表。 在insert方法中,将插入一条记录。
但是当我签入ddms时,甚至没有创建db。我找到了一个数据文件夹,但没有数据/数据文件夹。
知道为什么会这样吗?
package example.com.sensor;
import java.io.File;
import java.util.HashMap;
import java.util.Date;
import android.util.Log;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class SqlController extends SQLiteOpenHelper {
private static final String LOGCAT = null;
public SqlController(Context context) {
super(context, "sensor.sqlite", null, 1);
Log.d(LOGCAT, "Created");
this.onCreate(super.getReadableDatabase());
}
@Override
public void onCreate(SQLiteDatabase database) {
String x = "CREATE TABLE [sport] ([id] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,";
x+=" [accx] REAL,";
x+=" [accy] REAL,";
x+=" [accz] REAL,";
x+=" [geox] REAL,";
x+=" [geoy] REAL,";
x+=" [geoz] REAL,";
x+=" [activity] TEXT,";
x+=" [datetime] TIMESTAMP)";
database.execSQL(x);
}
@Override
public void onUpgrade(SQLiteDatabase database, int version_old, int current_version) {
onCreate(database);
}
public void insert(HashMap<String, String> queryValues) {
SQLiteDatabase database = this.getWritableDatabase();
System.out.println(database.getPath());
ContentValues values = new ContentValues();
values.put("accx", queryValues.get("accx"));
values.put("accy", queryValues.get("accy"));
values.put("accz", queryValues.get("accz"));
values.put("geox", queryValues.get("geox"));
values.put("geoy", queryValues.get("geoy"));
values.put("geoz", queryValues.get("geoz"));
values.put("activity", queryValues.get("activity"));
values.put("datetime", new Date().toString());
database.insert("sport", null, values);
database.close();
}
}
答案 0 :(得分:1)
您获得的异常是因为您直接在构造函数中调用this.onCreate(super.getReadableDatabase());
。无需直接致电onCreate()
,这是will be called when the database file did not exist previously的回调。
无需更改数据库文件写入的路径,只需保留即可。正如@pathfinderelite所提到的,它被写入你的应用程序的内部存储空间,除非你有一个有根设备,否则无法访问它。
您声明您不知道它存储在哪里,但您确实知道它存储的位置,您只是无法访问它,这是预期的。
为了验证数据库的内容,只需查询简单的select
查询,并记录结果。
public void printAllActivities() {
SQLiteDatabase database = this.getWritableDatabase();
System.out.println(database.getPath());
Cursor c = database.rawQuery("select * from sport", null);
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
int index = c.getColumnIndex("activity");
String activity = c.getString(index);
System.out.println("activity from database: " + activity);
}
c.close();
database.close();
}