Android SQLite ContentValues 未插入

2023-12-11

我正在尝试将值插入SQLiteAndroid 应用程序的数据库。 我正在编写以下代码:

public class DataBaseAdapter extends SQLiteOpenHelper 
{
private static final int DATABASE_VERSION = 1;

// Database Name
private static final String DATABASE_NAME = "AlarmSystem";

// Alarm table name
private static final String TABLE_NAME = "Alarms";

//AlarmTable Columns names
private static final String KEY_ALARM_ID = "Id";
private static final String KEY_DESC = "Description";
private static final String KEY_REPEAT_DAY = "RepeatDay";
private static final String KEY_REPEAT_TYPE = "REPEAT_TYPE";
private static final String KEY_CALENDAR = "Calendar";
private static final String KEY_APP = "Device";
private static final String KEY_ACTIVE = "Active";

//creating database
public DataBaseAdapter(Context con)
{
    super(con, DATABASE_NAME, null, DATABASE_VERSION);
}

//creating table
@Override
public void onCreate(SQLiteDatabase db)
{
    String CREATE_TABLE = "Create Table "+TABLE_NAME+"("
            +KEY_ALARM_ID+" integer primary key AUTOINCREMENT, "+KEY_DESC+" TEXT, "+KEY_REPEAT_DAY+ " TEXT,"
            +KEY_REPEAT_TYPE+" integer, "+KEY_CALENDAR+" TEXT, "+KEY_APP+" TEXT, "+KEY_ACTIVE+" integer );";

    db.execSQL(CREATE_TABLE);
}
//updating database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
    // Drop older table if existed
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);

    // Create tables again
    onCreate(db);
}
public void addAlarm(Alarm alarm)
{
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();

    values.put(KEY_DESC, alarm.getDesc());
    values.put(KEY_REPEAT_DAY, alarm.getRepeatDay());
    values.put(KEY_REPEAT_TYPE, alarm.getRepeatType());
    values.put(KEY_CALENDAR, Long.toString(alarm.getCalendarInMillis()));
    values.put(KEY_APP, alarm.getApp());
    values.put(KEY_ACTIVE, alarm.getActive());

    db.insert(TABLE_NAME, null, values);
    db.close();
}

我不知道出了什么问题。所以我发布 Logcat:

    03-13 17:09:33.388: D/SqliteDatabaseCpp(1095): Registering sqlite logging func: /data/data/com.example.devicecontrolpanel/databases/AlarmSystem
    03-13 17:09:33.408: D/SqliteDatabaseCpp(1095): DB info: open db, path = /data/data/com.example.devicecontrolpanel/databases , key = 9lYvmWqw, flag = 6, cannot stat file, errno = 2, message = No such file or directory
    03-13 17:09:33.408: D/SqliteDatabaseCpp(1095): DB info: path = /data/data/com.example.devicecontrolpanel/databases , key = 9lYvmWqw, handle: 0x8ccc98, type: w, r/w: (0,1), mode: truncate, disk free size: 777 M
    03-13 17:09:33.588: D/SqliteDatabaseCpp(1095): DB info: close db, path = /data/data/com.example.devicecontrolpanel/databases , key = 9lYvmWqw, handle = 0x8ccc98, type = w, r/w = (0, 0)
    03-13 17:09:33.588: D/SqliteDatabaseCpp(1095): DB info: open db, path = /data/data/com.example.devicecontrolpanel/databases , key = 9lYvmWqw, flag = 6, file size = 4096
    03-13 17:09:33.588: D/SqliteDatabaseCpp(1095): DB info: path = /data/data/com.example.devicecontrolpanel/databases , key = 9lYvmWqw, handle: 0x8f3100, type: w, r/w: (0,1), mode: truncate, disk free size: 777 M
    03-13 17:09:33.588: D/SqliteDatabaseCpp(1095): DB info: close db, path = /data/data/com.example.devicecontrolpanel/databases , key = 9lYvmWqw, handle = 0x8f3100, type = w, r/w = (0, 0)
    03-13 17:09:33.598: D/AndroidRuntime(1095): Shutting down VM
    03-13 17:09:33.598: W/dalvikvm(1095): threadid=1: thread exiting with uncaught exception (group=0x40ae0228)
    03-13 17:09:33.618: E/AndroidRuntime(1095): FATAL EXCEPTION: main
    03-13 17:09:33.618: E/AndroidRuntime(1095): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.devicecontrolpanel/com.example.devicecontrolpanel.Main}: java.lang.IllegalStateException: database /data/data/com.example.devicecontrolpanel/databases/AlarmSystem (conn# 0) already closed
    03-13 17:09:33.618: E/AndroidRuntime(1095):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2205)
    03-13 17:09:33.618: E/AndroidRuntime(1095):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2240)
    03-13 17:09:33.618: E/AndroidRuntime(1095):     at android.app.ActivityThread.access$600(ActivityThread.java:139)
    03-13 17:09:33.618: E/AndroidRuntime(1095):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1262)
    03-13 17:09:33.618: E/AndroidRuntime(1095):     at android.os.Handler.dispatchMessage(Handler.java:99)
    03-13 17:09:33.618: E/AndroidRuntime(1095):     at android.os.Looper.loop(Looper.java:156)
    03-13 17:09:33.618: E/AndroidRuntime(1095):     at android.app.ActivityThread.main(ActivityThread.java:4987)
    03-13 17:09:33.618: E/AndroidRuntime(1095):     at java.lang.reflect.Method.invokeNative(Native Method)
    03-13 17:09:33.618: E/AndroidRuntime(1095):     at java.lang.reflect.Method.invoke(Method.java:511)
    03-13 17:09:33.618: E/AndroidRuntime(1095):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    03-13 17:09:33.618: E/AndroidRuntime(1095):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    03-13 17:09:33.618: E/AndroidRuntime(1095):     at dalvik.system.NativeStart.main(Native Method)
    03-13 17:09:33.618: E/AndroidRuntime(1095): Caused by: java.lang.IllegalStateException: database /data/data/com.example.devicecontrolpanel/databases/AlarmSystem (conn# 0) already closed
    03-13 17:09:33.618: E/AndroidRuntime(1095):     at android.database.sqlite.SQLiteDatabase.verifyDbIsOpen(SQLiteDatabase.java:2194)
    03-13 17:09:33.618: E/AndroidRuntime(1095):     at android.database.sqlite.SQLiteDatabase.lock(SQLiteDatabase.java:448)
    03-13 17:09:33.618: E/AndroidRuntime(1095):     at android.database.sqlite.SQLiteDatabase.lock(SQLiteDatabase.java:435)
    03-13 17:09:33.618: E/AndroidRuntime(1095):     at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:79)
    03-13 17:09:33.618: E/AndroidRuntime(1095):     at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:176)
    03-13 17:09:33.618: E/AndroidRuntime(1095):     at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:168)
    03-13 17:09:33.618: E/AndroidRuntime(1095):     at com.example.devicecontrolpanel.DataBaseAdapter.getAlarmsCount(DataBaseAdapter.java:190)
    03-13 17:09:33.618: E/AndroidRuntime(1095):     at com.example.devicecontrolpanel.DataBaseAdapter.getAllAlarmList(DataBaseAdapter.java:117)
    03-13 17:09:33.618: E/AndroidRuntime(1095):     at com.example.devicecontrolpanel.Main.onCreate(Main.java:19)
    03-13 17:09:33.618: E/AndroidRuntime(1095):     at android.app.Activity.performCreate(Activity.java:4538)
    03-13 17:09:33.618: E/AndroidRuntime(1095):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1071)
    03-13 17:09:33.618: E/AndroidRuntime(1095):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2161)
    03-13 17:09:33.618: E/AndroidRuntime(1095):     ... 11 more
    03-13 17:16:48.144: D/SqliteDatabaseCpp(2080): Registering sqlite logging func: /data/data/com.example.devicecontrolpanel/databases/AlarmSystem
    03-13 17:16:48.144: D/SqliteDatabaseCpp(2080): DB info: open db, path = /data/data/com.example.devicecontrolpanel/databases , key = 9lYvmWqw, flag = 6, cannot stat file, errno = 2, message = No such file or directory
    03-13 17:16:48.164: D/SqliteDatabaseCpp(2080): DB info: path = /data/data/com.example.devicecontrolpanel/databases , key = 9lYvmWqw, handle: 0x86b220, type: w, r/w: (0,1), mode: truncate, disk free size: 777 M
    03-13 17:16:48.384: D/SqliteDatabaseCpp(2080): DB info: close db, path = /data/data/com.example.devicecontrolpanel/databases , key = 9lYvmWqw, handle = 0x86b220, type = w, r/w = (0, 0)
    03-13 17:16:48.384: D/SqliteDatabaseCpp(2080): DB info: open db, path = /data/data/com.example.devicecontrolpanel/databases , key = 9lYvmWqw, flag = 6, file size = 5120
    03-13 17:16:48.384: D/SqliteDatabaseCpp(2080): DB info: path = /data/data/com.example.devicecontrolpanel/databases , key = 9lYvmWqw, handle: 0x897800, type: w, r/w: (0,1), mode: truncate, disk free size: 777 M
    03-13 17:16:48.384: D/SqliteDatabaseCpp(2080): DB info: close db, path = /data/data/com.example.devicecontrolpanel/databases , key = 9lYvmWqw, handle = 0x897800, type = w, r/w = (0, 0)
    03-13 17:16:48.394: D/AndroidRuntime(2080): Shutting down VM
    03-13 17:16:48.414: W/dalvikvm(2080): threadid=1: thread exiting with uncaught exception (group=0x40ae0228)
    03-13 17:16:48.424: E/AndroidRuntime(2080): FATAL EXCEPTION: main
    03-13 17:16:48.424: E/AndroidRuntime(2080): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.devicecontrolpanel/com.example.devicecontrolpanel.Main}: java.lang.IllegalStateException: database /data/data/com.example.devicecontrolpanel/databases/AlarmSystem (conn# 0) already closed
    03-13 17:16:48.424: E/AndroidRuntime(2080):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2205)
    03-13 17:16:48.424: E/AndroidRuntime(2080):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2240)
    03-13 17:16:48.424: E/AndroidRuntime(2080):     at android.app.ActivityThread.access$600(ActivityThread.java:139)
    03-13 17:16:48.424: E/AndroidRuntime(2080):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1262)
    03-13 17:16:48.424: E/AndroidRuntime(2080):     at android.os.Handler.dispatchMessage(Handler.java:99)
    03-13 17:16:48.424: E/AndroidRuntime(2080):     at android.os.Looper.loop(Looper.java:156)
    03-13 17:16:48.424: E/AndroidRuntime(2080):     at android.app.ActivityThread.main(ActivityThread.java:4987)
    03-13 17:16:48.424: E/AndroidRuntime(2080):     at java.lang.reflect.Method.invokeNative(Native Method)
    03-13 17:16:48.424: E/AndroidRuntime(2080):     at java.lang.reflect.Method.invoke(Method.java:511)
    03-13 17:16:48.424: E/AndroidRuntime(2080):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    03-13 17:16:48.424: E/AndroidRuntime(2080):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    03-13 17:16:48.424: E/AndroidRuntime(2080):     at dalvik.system.NativeStart.main(Native Method)
    03-13 17:16:48.424: E/AndroidRuntime(2080): Caused by: java.lang.IllegalStateException: database /data/data/com.example.devicecontrolpanel/databases/AlarmSystem (conn# 0) already closed
    03-13 17:16:48.424: E/AndroidRuntime(2080):     at android.database.sqlite.SQLiteDatabase.verifyDbIsOpen(SQLiteDatabase.java:2194)
    03-13 17:16:48.424: E/AndroidRuntime(2080):     at android.database.sqlite.SQLiteDatabase.lock(SQLiteDatabase.java:448)
    03-13 17:16:48.424: E/AndroidRuntime(2080):     at android.database.sqlite.SQLiteDatabase.lock(SQLiteDatabase.java:435)
    03-13 17:16:48.424: E/AndroidRuntime(2080):     at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:79)
    03-13 17:16:48.424: E/AndroidRuntime(2080):     at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:176)
    03-13 17:16:48.424: E/AndroidRuntime(2080):     at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:168)
    03-13 17:16:48.424: E/AndroidRuntime(2080):     at com.example.devicecontrolpanel.DataBaseAdapter.getAlarmsCount(DataBaseAdapter.java:196)
    03-13 17:16:48.424: E/AndroidRuntime(2080):     at com.example.devicecontrolpanel.DataBaseAdapter.getAllAlarmList(DataBaseAdapter.java:123)
    03-13 17:16:48.424: E/AndroidRuntime(2080):     at com.example.devicecontrolpanel.Main.onCreate(Main.java:19)
    03-13 17:16:48.424: E/AndroidRuntime(2080):     at android.app.Activity.performCreate(Activity.java:4538)
    03-13 17:16:48.424: E/AndroidRuntime(2080):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1071)
    03-13 17:16:48.424: E/AndroidRuntime(2080):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2161)
    03-13 17:16:48.424: E/AndroidRuntime(2080):     ... 11 more

一般来说,最好将包装方法分开(在您的情况下addAlarm, editAlarm, deleteAlarm)在一个单独的类中。我建议你创建一个名为的新类myAppDataSource并在该类中添加所有包装方法以使您的生活更轻松。

该类的代码如下所示:

 public class StudyManagerDataSource {

    SQLiteOpenHelper dbHelper;
    SQLiteDatabase database;

public StudyManagerDataSource(Context context) {
            dbHelper = new DatabaseAdapter(context);

        }

public void addAlarm(Alarm alarm)
{  

    // open the database connection 
    open();
    ContentValues values = new ContentValues();

    values.put(KEY_DESC, alarm.getDesc());
    values.put(KEY_REPEAT_DAY, alarm.getRepeatDay());
    values.put(KEY_REPEAT_TYPE, alarm.getRepeatType());
    values.put(KEY_CALENDAR, Long.toString(alarm.getCalendarInMillis()));
    values.put(KEY_APP, alarm.getApp());
    values.put(KEY_ACTIVE, alarm.getActive());
    database.insert(TABLE_NAME, null, values);
    // I will suggest to keep the connection to the database open when your app is 
    // running, the recommended time to close the connection is when your app is 
    //going to pause/stop.
    close();
}

public void open() {
        database = dbHelper.getWritableDatabase();
        Log.i(LOG_TAG, "Database Opened");
    } // end method open

public void close() {
        Log.i(LOG_TAG, "Database Closed");
        dbHelper.close();
    } // end method close
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android SQLite ContentValues 未插入 的相关文章

  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • 如何使用 IF 检查 TextView 可见性

    我有一个 onCheckedChangeListener 来根据选择的单选按钮显示文本视图 我有 1 个疑问和 1 个难题 想知道是否有人可以帮助我 问题 您能否将单选组默认检查值设置为 否 单选按钮 以便一开始就不会检查任何内容 问题 如
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • 我想实现下面的布局,按钮应该在屏幕底部,当惰性列被填充时,按钮不应该出去

    顶部有惰性列 惰性列下方有输入电话号码布局并从电话簿布局添加联系人 我希望当未添加联系人时此布局位于顶部 当我添加大量联系人时输入电话号码并添加电话簿布局中的联系人会随着惰性列滚动并移出屏幕 我不让他们走出屏幕 当接触较多时 它们必须粘在底
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • Android Studio 0.4.3 Eclipse项目没有gradle

    在此版本之前 在 Android Studio 中按原样打开 Eclipse 项目似乎很容易 无需任何转换 我更喜欢 Android Studio 环境 但我正在开发一个使用 eclipse 作为主要 IDE 的项目 我不想只为这个项目下载
  • Java Integer CompareTo() - 为什么使用比较与减法?

    我发现java lang Integer实施compareTo方法如下 public int compareTo Integer anotherInteger int thisVal this value int anotherVal an
  • iphone sqlite 静态链接?

    有人静态链接 sqlite 而不是使用动态链接 吗 我遇到的问题是 越狱手机的用户没有与普通 iPhone 所采用的 sqlite 版本相同的版本 因此导致崩溃 我假设在我的应用程序中静态链接已知版本的 sqlite 就是答案 我需要全文支
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • .isProviderEnabled(LocationManager.NETWORK_PROVIDER) 在 Android 中始终为 true

    我不知道为什么 但我的变量isNetowrkEnabled总是返回 true 我的设备上是否启用互联网并不重要 这是我的GPSTracker class public class GPSTracker extends Service imp
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • 编译器抱怨“缺少返回语句”,即使不可能达到缺少返回语句的条件

    在下面的方法中 编译器抱怨缺少退货声明即使该方法只有一条路径 并且它包含一个return陈述 抑制错误需要另一个return陈述 public int foo if true return 5 鉴于Java编译器可以识别无限循环 https
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • 将 Intent 包装在 LabeledIntent 中以用于显示目的

    要求 我的应用程序中有一个 共享 按钮 我需要通过 Facebook 分享 我需要选择是否安装原生 Facebook 应用程序 我们的决定是 如果未安装该应用程序 则将用户发送到 facebook com 进行分享 当前状态 我可以检测何时
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo
  • android sdk 的位置尚未在 Windows 操作系统的首选项中设置

    在 Eclipse 上 我转到 windows gt Android SDK 和 AVD Manager 然后弹出此消息 Android sdk 的位置尚未在首选项中设置 进入首选项 在侧边栏找到 Android 然后会出现一个 SDK 位
  • 如何将 google+ 登录集成到我的 Android 应用程序中?

    大家好 实际上我需要通过我的应用程序从 google 登录人们 现在我阅读了 google 上的文档 其中指出 要允许用户登录 请将 Google Sign In 集成到您的应用中 初始化 GoogleApiClient 对象时 请求 PL
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O

随机推荐