gpt4 book ai didi

使用 ADB 拉取时 Android SQLite 数据库损坏

转载 作者:太空狗 更新时间:2023-10-29 13:08:17 26 4
gpt4 key购买 nike

我对 Android 上的 SQLite 数据库有一个大问题。在 DatabaseContra.java 文件中我有

public static class HeartRateEntry implements BaseColumns {
public static final String TABLE_NAME = "heart_rate_readings";
public static final String COLUMN_NAME_SESSION_ID = "session_id";
public static final String COLUMN_NAME_SENSOR_ID= "sensor_id";
public static final String COLUMN_NAME_TIMESTAMP_NANO = "timestamp_nano";
public static final String COLUMN_NAME_TIMESTAMP_MILLI = "timestamp_milli";
public static final String COLUMN_NAME_HR = "heart_rate";
public static final String COLUMN_NAME_RR = "rr_interval";
}

在继承自 SQLiteOpenHelper 的 DatabaseHelper 类中,我有表的创建语句:

private static final String CREATE_TABLE_HEART_RATE_READINGS =
"CREATE TABLE " + DatabaseContract.HeartRateEntry.TABLE_NAME + " (" +
DatabaseContract.HeartRateEntry._ID + " INTEGER PRIMARY KEY," +
DatabaseContract.HeartRateEntry.COLUMN_NAME_SESSION_ID + " INTEGER NOT NULL," +
DatabaseContract.HeartRateEntry.COLUMN_NAME_SENSOR_ID + " INTEGER NOT NULL," +
DatabaseContract.HeartRateEntry.COLUMN_NAME_TIMESTAMP_NANO + " INTEGER NOT NULL," +
DatabaseContract.HeartRateEntry.COLUMN_NAME_TIMESTAMP_MILLI + " INTEGER NOT NULL," +
DatabaseContract.HeartRateEntry.COLUMN_NAME_HR + " INTEGER," +
DatabaseContract.HeartRateEntry.COLUMN_NAME_RR + " INTEGER);";

public void onCreate(SQLiteDatabase db) 方法中,我正在创建表 db.execSQL(CREATE_TABLE_HEART_RATE_READINGS);

不,我尝试通过

每隔一秒插入一行
SQLiteOpenHelper mDatabaseHelper = new DatabaseHelper(MainActivity.context);
SQLiteDatabase db = mDatabaseHelper.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(DatabaseContract.HeartRateEntry.COLUMN_NAME_SESSION_ID, MainActivity.sessionDbID);
contentValues.put(DatabaseContract.HeartRateEntry.COLUMN_NAME_SENSOR_ID, MainActivity.polarDbID);
contentValues.put(DatabaseContract.HeartRateEntry.COLUMN_NAME_TIMESTAMP_NANO, timeNano);
contentValues.put(DatabaseContract.HeartRateEntry.COLUMN_NAME_TIMESTAMP_MILLI, timeMilli);
contentValues.put(DatabaseContract.HeartRateEntry.COLUMN_NAME_HR, hr);
contentValues.put(DatabaseContract.HeartRateEntry.COLUMN_NAME_RR, rr[i]);
db.insert(DatabaseContract.HeartRateEntry.TABLE_NAME, null, contentValues);

数据库在服务中使用,但我使用的是 MainActivity 的上下文(我已将其存储在静态变量中)。我在服务中使用它,但我只使用 MainActivity 的上下文。我将连接打开到数据库,只在最后关闭它。我也只使用一个数据库连接。

我在执行时没有收到任何错误消息。但后来我用

从我的 PC 中提取数据库
adb -d shell "run-as com.example cat /data/data/com.example/databases/sensors.db" > C:\Users\myName\Desktop\sensors.db

当我现在使用 SQLiteStudio 打开数据库时,当我想访问表时收到以下错误消息:

Could not load data for table heart_rate_readings. Error details: Error while executing SQL query on database 'sensors': database disk image is malformed

可能是什么错误?我完全被困住了,不知道它可能是什么。我使用的是 Android 5.1。

我还定义了其他表(用户信息等)。这些表格工作(但我只输入一次记录,而不是每秒输入一次)。

最佳答案

从设备中拉取数据库的命令:

adb -d pull /data/data/com.example/databases/sensors.db

如果您不能像这样访问数据库,但 run-as 适合您,则将数据库复制到可公开访问的位置(例如 /),然后使用pull

关于使用 ADB 拉取时 Android SQLite 数据库损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44636011/

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