gpt4 book ai didi

java - 通过android创建sqlite数据库

转载 作者:行者123 更新时间:2023-12-01 11:37:00 26 4
gpt4 key购买 nike

我相信通过以下代码,我能够创建一个数据库,创建一个表,并在其中插入传感器值。

这一行创建一个数据库-> super (上下文,“sensor.sqlite”,null,1);在数据/data/example.com.sensor/databases/sensor.sqlite

在oncreate方法中,创建了一个表。在insert方法中,将插入一条记录。

但是,当我 checkin ddms 时,数据库甚至没有创建。我找到了一个数据文件夹,但没有数据/数据文件夹。

知道为什么会发生这种情况吗?

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 提到的,它被写入应用程序的内部存储,除非您有 root 设备,否则无法访问该存储。

您声称您不知道它的存储位置,但您确实知道它的存储位置,只是您无权访问它,这是预期的。

为了验证数据库的内容,只需进行简单的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();
}

关于java - 通过android创建sqlite数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29868512/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com