2013-02-25 85 views
0

我的代码有什么问题吗? setStatus总是返回-1。一直在追踪错误的代码,但我找不到它。也许你们在这里可以。非常令人沮丧。我的数据库不会添加值。我的代码是

这是我怎么叫数据库:

SQLDatabaseLevelOne sql; 

     sql = new SQLDatabaseLevelOne(MainActivity.this); 
     sql.open(); 
     sql.setStatus("1"); 
     sql.close(); 

这是从我SQLDatabaseLevelOne.class:

public static final String KEY_ID = "_id"; 
    public static final String KEY_QUESTION_STATUS = "_STATUS"; 
    public static final String KEY_SCORE = "_SCORE"; 
    //public static final String KEY_INDEX = "_INDEX"; 

    private static final String DATABASE_NAME = "passworddb"; 
    private static final String DATABASE_TABLE = "passwordtable"; 
    private static final int DATABASE_VERSION = 1; 
    //private int index_score; 

    private DbHelper dbHelper; 
    private final Context dbContext; 
    private SQLiteDatabase sqlDatabase; 

    private static class DbHelper extends SQLiteOpenHelper { 

     public DbHelper(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase database) { 
      /*database.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + 
        KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
        KEY_QUESTION_STATUS + " TEXT NOT NULL, " + 
        KEY_SCORE + " TEXT NOT NULL, " + 
        KEY_INDEX + " TEXT NOT NULL);");*/ 
      database.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + 
        KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
        KEY_QUESTION_STATUS + " TEXT NOT NULL, " + 
        KEY_SCORE + " TEXT NOT NULL);"); 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase database, int arg1, int arg2) { 
      database.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE); 
      onCreate(database); 
     } 
    } 

     public SQLDatabaseLevelOne(Context context) { 
      dbContext = context; 
     } 

     public long setStatus (String status) {   
      ContentValues dbContentValues = new ContentValues(); 
      dbContentValues.put(KEY_QUESTION_STATUS, status); 
      //dbContentValues.put(KEY_SCORE, score); 
      return sqlDatabase.insert(DATABASE_TABLE, null, dbContentValues); 
     } 

public void open() { 
      dbHelper = new DbHelper(dbContext); 
      sqlDatabase = dbHelper.getWritableDatabase(); 
      return; 
     } 

     public void close() { 
      dbHelper.close(); 
     } 
+0

因为“KEY_SCORE TEXT NOT NULL”有一个约束(NOT NULL),因为你不给它一个值。 – njzk2 2013-02-25 17:05:19

+0

我不知道该如何谢谢大家。所有的答复都是正确的。我接受了答案。我一直在使用NOT NULL而不考虑对数据库的影响。 – droidH 2013-02-25 17:18:14

+1

没关系,我们都有足够的分数。在未来的某一天,通过帮助别人简单地“付出代价”。 – Sam 2013-02-25 17:20:33

回答

1

您还没有发布任何LogCat错误,所以可能还有其他问题。但你必须为值都KEY_QUESTION_STATUS因为你指定的,他们不能在null表定义KEY_SCORE

KEY_QUESTION_STATUS + " TEXT NOT NULL, " + 
KEY_SCORE + " TEXT NOT NULL);"); 

什么,当你尝试这种情况发生?

public long setStatus (String status) {   
    ContentValues dbContentValues = new ContentValues(); 
    dbContentValues.put(KEY_QUESTION_STATUS, status); 
    dbContentValues.put(KEY_SCORE, "something"); 
    return sqlDatabase.insert(DATABASE_TABLE, null, dbContentValues); 
} 
1

setStatus(),调用sqlDatabase.insert()将返回-1。这意味着您的数据无法插入。

尝试改为将其改为sqlDatabase.insertOrThrow();这会在失败时抛出一个异常,这将使得更容易找出实际出错的地方。

+0

他有'非空'列,他的插入错过了这些列 - >插入失败。 – WarrenFaith 2013-02-25 17:05:35

+0

是的,我已经upvoted其他答案正确诊断实际问题。 – 2013-02-25 17:07:10

2

更改表创建查询作为

database.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + 
        KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
        KEY_QUESTION_STATUS + " TEXT NOT NULL, " + 
        KEY_SCORE + " TEXT);"); 

,因为你正在创建KEY_SCORETEXT NOT NULL则u必须KEY_SCORE

记妙传值:更改表结构,你将需要后更改数据库版本

+0

(+1)HeyρяσѕρєяK,看起来你在几周内会比我拥有更多积分! – Sam 2013-02-25 17:19:38

相关问题