试图将值插入一个数据库,但插入()失败 [英] Trying in insert values into a database, but the insert() is failing

查看:215
本文介绍了试图将值插入一个数据库,但插入()失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以,我有我正在做一个应用程序可以简单地描述为任务列表。我使用SQLite数据库来存储所有数据。我在与数据库中的各种问题,但让我们坚持使用这种更pressing位在这里。在试运行,我做了一个基本的输入测试,并得到这个logcat的条目:

So, I have an application I'm making that can be simply described as a task list. I'm using an SQLite database to store all the data. I'm having various problems with the database, but let's stick with this more pressing bit here. On a test run, I did a basic input test, and got this logcat entry:

06-13 01:49:33.868: E/Database(482): Error inserting ISCHECKED=0 NOTE=This is a test. _id=0 TASK=Hello World
06-13 01:49:33.868: E/Database(482): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
06-13 01:49:33.868: E/Database(482):    at android.database.sqlite.SQLiteStatement.native_execute(Native Method)
06-13 01:49:33.868: E/Database(482):    at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:61)
06-13 01:49:33.868: E/Database(482):    at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1582)
06-13 01:49:33.868: E/Database(482):    at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1426)
06-13 01:49:33.868: E/Database(482):    at com.mowdownDevelopments.nagTasks.NagTasksDatabaseHelper.addTask(NagTasksDatabaseHelper.java:68)
06-13 01:49:33.868: E/Database(482):    at com.mowdownDevelopments.nagTasks.NagTasksAddTaskFragment.save(NagTasksAddTaskFragment.java:65)
06-13 01:49:33.868: E/Database(482):    at com.mowdownDevelopments.nagTasks.NagTasksAddTaskFragment.onOptionsItemSelected(NagTasksAddTaskFragment.java:54)
06-13 01:49:33.868: E/Database(482):    at com.actionbarsherlock.app.SherlockFragment.onOptionsItemSelected(SherlockFragment.java:67)
06-13 01:49:33.868: E/Database(482):    at android.support.v4.app.FragmentManagerImpl.dispatchOptionsItemSelected(FragmentManager.java:1919)
06-13 01:49:33.868: E/Database(482):    at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:357)
06-13 01:49:33.868: E/Database(482):    at com.actionbarsherlock.app.SherlockFragmentActivity.onMenuItemSelected(SherlockFragmentActivity.java:288)
06-13 01:49:33.868: E/Database(482):    at com.actionbarsherlock.ActionBarSherlock.callbackOptionsItemSelected(ActionBarSherlock.java:586)
06-13 01:49:33.868: E/Database(482):    at com.actionbarsherlock.internal.ActionBarSherlockCompat.onMenuItemSelected(ActionBarSherlockCompat.java:526)
06-13 01:49:33.868: E/Database(482):    at com.actionbarsherlock.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:738)
06-13 01:49:33.868: E/Database(482):    at com.actionbarsherlock.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:148)
06-13 01:49:33.868: E/Database(482):    at com.actionbarsherlock.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:879)
06-13 01:49:33.868: E/Database(482):    at com.actionbarsherlock.internal.view.menu.ActionMenuView.invokeItem(ActionMenuView.java:510)
06-13 01:49:33.868: E/Database(482):    at com.actionbarsherlock.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:145)
06-13 01:49:33.868: E/Database(482):    at android.view.View.performClick(View.java:2485)
06-13 01:49:33.868: E/Database(482):    at android.view.View$PerformClick.run(View.java:9080)
06-13 01:49:33.868: E/Database(482):    at android.os.Handler.handleCallback(Handler.java:587)
06-13 01:49:33.868: E/Database(482):    at android.os.Handler.dispatchMessage(Handler.java:92)
06-13 01:49:33.868: E/Database(482):    at android.os.Looper.loop(Looper.java:123)
06-13 01:49:33.868: E/Database(482):    at android.app.ActivityThread.main(ActivityThread.java:3683)
06-13 01:49:33.868: E/Database(482):    at java.lang.reflect.Method.invokeNative(Native Method)
06-13 01:49:33.868: E/Database(482):    at java.lang.reflect.Method.invoke(Method.java:507)
06-13 01:49:33.868: E/Database(482):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
06-13 01:49:33.868: E/Database(482):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
06-13 01:49:33.868: E/Database(482):    at dalvik.system.NativeStart.main(Native Method)

我看不出有什么问题。我添加任务到数据库的方法是一样简单,因为它得到:

I can't see what the problem is. My method for adding the task to the database is about as simple as it gets:

public void addTask(String title, String notes)
{
    SQLiteDatabase db = getWritableDatabase();
    int newestID = getNewTaskId(db);
    ContentValues values = new ContentValues();
    values.put("_id", newestID);
    values.put("TASK", title);
    values.put("NOTE", notes);
    values.put("ISCHECKED", 0);
    db.insert("TASKS", null, values);
    db.close();
}
@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE IF NOT EXISTS TASKS (_id INTEGER PRIMARY KEY, TASK TEXT, NOTE TEXT, ISCHECKED INTEGER);");
}
public int getNewTaskId(SQLiteDatabase db)
{
    Cursor c = db.rawQuery("SELECT MAX(_id) FROM TASKS", null);
    int columnID = c.getColumnIndex(ID);
    if (columnID == -1)
    {
        return 0;
    } else {
        return c.getInt(columnID) +1;
    }
}

谁能帮我吗?我看不出在那里我得到一个约束失败。

Can anyone help me out? I don't see where I'm getting a "Constraint failed".

推荐答案

您所得到的最大的ID,这意味着该ID已经存在。我想你忘了你回到它之前递增MAX ID。这是假设你的getNewAlarmId几乎完全一样getNewTaskId

You are getting the MAX id, which means the id already exists. I think you forgot to increment the MAX id before you return it. This is assuming your getNewAlarmId is almost exactly the same as getNewTaskId

public int getNewAlarmId(SQLiteDatabase db)
{
    Cursor c = db.rawQuery("SELECT MAX(_id) FROM ALARMS", null);
    int columnID = c.getColumnIndex(ID);
    if (columnID == -1)
    {
        return 0;
    } else {
        return c.getInt(columnID) + 1;
    }
}

更新

尝试硬编码值喜欢10.是否至少运行一次,然后断了?如果所以我认为这可能是你的光标。你没有打电话给moveToFirst像湿眶客提示

Try hardcoding the value to like 10. Does it run at least once, then break? If so I think it may be your cursor. You didn't call moveToFirst like Squonk suggested

这篇关于试图将值插入一个数据库,但插入()失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆