通过android创建sqlite数据库
Create sqlite database through android
我相信使用以下代码,我能够创建一个数据库,创建一个 table,并在其中插入传感器值。
这一行创建一个数据库
-> 超级(上下文,"sensor.sqlite",空,1);
在 data/data/example.com.sensor/databases/sensor.sqlite
在oncreate方法中,创建了一个table。
在insert方法中,会插入一条记录。
然而,当我签入 ddms 时,甚至没有创建数据库。我找到了一个数据文件夹,但没有 data/data 文件夹。
知道为什么会这样吗?
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();
}
}
您得到的异常是因为您直接在构造函数中调用 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();
}
我相信使用以下代码,我能够创建一个数据库,创建一个 table,并在其中插入传感器值。
这一行创建一个数据库 -> 超级(上下文,"sensor.sqlite",空,1); 在 data/data/example.com.sensor/databases/sensor.sqlite
在oncreate方法中,创建了一个table。 在insert方法中,会插入一条记录。
然而,当我签入 ddms 时,甚至没有创建数据库。我找到了一个数据文件夹,但没有 data/data 文件夹。
知道为什么会这样吗?
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();
}
}
您得到的异常是因为您直接在构造函数中调用 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();
}