Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android数据库中获取SqliteContainException_Java_Android_Sqlite - Fatal编程技术网

Java 在Android数据库中获取SqliteContainException

Java 在Android数据库中获取SqliteContainException,java,android,sqlite,Java,Android,Sqlite,在我的Android项目中,我遇到了一个约束失败的异常,我不太清楚它是从哪里来的。我的助手类如下所示: public static final String WORDS_TABLE = "words"; public static final String ATT_WORD = "word"; public static final String ATT_T1 = "T1"; public static final String ATT_T2 = "T2"; public static

在我的Android项目中,我遇到了一个约束失败的异常,我不太清楚它是从哪里来的。我的助手类如下所示:

    public static final String WORDS_TABLE = "words";
public static final String ATT_WORD = "word";
public static final String ATT_T1 = "T1";
public static final String ATT_T2 = "T2";
public static final String ATT_T3 = "T3";
public static final String ATT_T4 = "T4";
public static final String ATT_T5 = "T5";
public static final String ATT_RECENT = "recent";
public static final String ATT_RATING = "rating";

public static final String STATISTICS_TABLE = "statistics";
public static final String ATT_GAMESPLAYED = "gamesPlayed";
public static final String ATT_wordsCORRECT = "wordsCorrect";
public static final String ATT_wordsWRONG = "wordsWrong";
public static final String ATT_POINTTOTAL = "pointTotal";
public static final String ATT_WINS = "wins";
public static final String ATT_LOSSES = "losses";

public static final String SETTING_TABLE = "settings";
public static final String ATT_SID = "sid";
public static final String ATT_TYPE = "type";
public static final String ATT_DURATION = "duration";
public static final String ATT_PTSTOWIN = "ptsToWin";

public static final String CATEGORIES_TABLE = "categories";
public static final String ATT_CATEGORY = "category";

public static final String BELONGS_TABLE = "belongs";

public static final String USER_TABLE = "user";
public static final String ATT_UID = "uid";

public static final String DATABASE_NAME = "taboo";
private static final int DATABASE_VERSION = 1;
private static final String TAG = "DBAdapter";

private static final String WORDS_CREATE =
    "create table words (_id primary key autoincrement, word text, "
    + "T1 text, T2 text, T3 text, T4 text, T5 text, "
    + "recent integer, rating integer);";

private static final String CATEGORIES_CREATE =
    "create table categories (_id integer primary key autoincrement, category text unique);";

private static final String BELONGS_CREATE =    
    "create table belongs (_id integer primary key autoincrement, word text, category text, "
    + "foreign key (word) references words (word), foreign key (category) references categories (category));";

private static final String USER_CREATE =
    "create table user (_id integer primary key autoincrement, uid text unique);";

private static final String STATISTICS_CREATE =   
    "create table statistics (_id integer primary key  autoincrement, uid text unique, gamesPlayed integer, wordsCorrect integer, "
    +"wordsWrong integer, pointTotal integer, wins integer, losses integer, "
    +"foreign key (uid) references user (uid));";

private static final String SETTINGS_CREATE =
    "create table settings (_id integer primary key autoincrement, uid text, sid text, "
    +"type text, duration integer, ptsToWin integer, "
    +"foreign key (uid) references user (uid));"
    ;


//**************************************************************
//*********************  Function Constants ********************
//**************************************************************

private final Context context; 
private DatabaseHelper DBHelper;
public static SQLiteDatabase db;
private int wordCount = 100;

//********************  Object 
public DBAdapter(Context ctx) 
{
    this.context = ctx;
    DBHelper = new DatabaseHelper(context);
}

private static class DatabaseHelper extends SQLiteOpenHelper 
{
    DatabaseHelper(Context context) 
    {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db)
    {
        db.execSQL(WORDS_CREATE);
        db.execSQL(CATEGORIES_CREATE);
        db.execSQL(BELONGS_CREATE);
        db.execSQL(USER_CREATE);
        db.execSQL(STATISTICS_CREATE);
        db.execSQL(SETTINGS_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, 
                          int newVersion) 
    {
        Log.w(TAG, "Upgrading database from version " + oldVersion 
              + " to "
              + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS " + WORDS_TABLE);
        onCreate(db);
    }
}    

//****************************************************
//********  Database Functions  **********************
//****************************************************

public DBAdapter open() throws SQLException 
{
    db = DBHelper.getWritableDatabase();
    return this;
} 
public void close() 
{
    DBHelper.close();
}
public void WordPopulate(Context ctx) throws SQLException, BiffException, IOException
{
    Workbook wb = null;
    AssetManager asst = ctx.getAssets();

    wb = Workbook.getWorkbook(asst.open("words.xls"));

    ContentValues content = new ContentValues();
    Sheet sh = wb.getSheet(0);
    final int rows = sh.getRows() - 1;
    final int columns = sh.getColumns() - 1;

    Cell a1;
    for (int i = 1; i <= rows; i++) {
            for (int j = 1; j <= columns; j++) {
                a1 = sh.getCell(j,i);
                String str = a1.getContents();
                if (j == 1) content.put(DBAdapter.ATT_WORD, str);
                if (j == 2) content.put(DBAdapter.ATT_T1, str);
                if (j == 3) content.put(DBAdapter.ATT_T2, str);
                if (j == 4) content.put(DBAdapter.ATT_T3, str);
                if (j == 5) content.put(DBAdapter.ATT_T4, str);
                if (j == 6) content.put(DBAdapter.ATT_T5, str);
                if (j == 7) content.put(DBAdapter.ATT_RECENT, (int)0);
                if (j == 8) content.put(DBAdapter.ATT_RATING, (int)0);
            }
            DBAdapter.db.insert(DBAdapter.WORDS_TABLE, "NULL", content);
        }
    }
我的数据库表“words”的填充使用JExcelAPI从excel电子表格扫描要输入的数据。填充方法如下所示:

    public static final String WORDS_TABLE = "words";
public static final String ATT_WORD = "word";
public static final String ATT_T1 = "T1";
public static final String ATT_T2 = "T2";
public static final String ATT_T3 = "T3";
public static final String ATT_T4 = "T4";
public static final String ATT_T5 = "T5";
public static final String ATT_RECENT = "recent";
public static final String ATT_RATING = "rating";

public static final String STATISTICS_TABLE = "statistics";
public static final String ATT_GAMESPLAYED = "gamesPlayed";
public static final String ATT_wordsCORRECT = "wordsCorrect";
public static final String ATT_wordsWRONG = "wordsWrong";
public static final String ATT_POINTTOTAL = "pointTotal";
public static final String ATT_WINS = "wins";
public static final String ATT_LOSSES = "losses";

public static final String SETTING_TABLE = "settings";
public static final String ATT_SID = "sid";
public static final String ATT_TYPE = "type";
public static final String ATT_DURATION = "duration";
public static final String ATT_PTSTOWIN = "ptsToWin";

public static final String CATEGORIES_TABLE = "categories";
public static final String ATT_CATEGORY = "category";

public static final String BELONGS_TABLE = "belongs";

public static final String USER_TABLE = "user";
public static final String ATT_UID = "uid";

public static final String DATABASE_NAME = "taboo";
private static final int DATABASE_VERSION = 1;
private static final String TAG = "DBAdapter";

private static final String WORDS_CREATE =
    "create table words (_id primary key autoincrement, word text, "
    + "T1 text, T2 text, T3 text, T4 text, T5 text, "
    + "recent integer, rating integer);";

private static final String CATEGORIES_CREATE =
    "create table categories (_id integer primary key autoincrement, category text unique);";

private static final String BELONGS_CREATE =    
    "create table belongs (_id integer primary key autoincrement, word text, category text, "
    + "foreign key (word) references words (word), foreign key (category) references categories (category));";

private static final String USER_CREATE =
    "create table user (_id integer primary key autoincrement, uid text unique);";

private static final String STATISTICS_CREATE =   
    "create table statistics (_id integer primary key  autoincrement, uid text unique, gamesPlayed integer, wordsCorrect integer, "
    +"wordsWrong integer, pointTotal integer, wins integer, losses integer, "
    +"foreign key (uid) references user (uid));";

private static final String SETTINGS_CREATE =
    "create table settings (_id integer primary key autoincrement, uid text, sid text, "
    +"type text, duration integer, ptsToWin integer, "
    +"foreign key (uid) references user (uid));"
    ;


//**************************************************************
//*********************  Function Constants ********************
//**************************************************************

private final Context context; 
private DatabaseHelper DBHelper;
public static SQLiteDatabase db;
private int wordCount = 100;

//********************  Object 
public DBAdapter(Context ctx) 
{
    this.context = ctx;
    DBHelper = new DatabaseHelper(context);
}

private static class DatabaseHelper extends SQLiteOpenHelper 
{
    DatabaseHelper(Context context) 
    {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db)
    {
        db.execSQL(WORDS_CREATE);
        db.execSQL(CATEGORIES_CREATE);
        db.execSQL(BELONGS_CREATE);
        db.execSQL(USER_CREATE);
        db.execSQL(STATISTICS_CREATE);
        db.execSQL(SETTINGS_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, 
                          int newVersion) 
    {
        Log.w(TAG, "Upgrading database from version " + oldVersion 
              + " to "
              + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS " + WORDS_TABLE);
        onCreate(db);
    }
}    

//****************************************************
//********  Database Functions  **********************
//****************************************************

public DBAdapter open() throws SQLException 
{
    db = DBHelper.getWritableDatabase();
    return this;
} 
public void close() 
{
    DBHelper.close();
}
public void WordPopulate(Context ctx) throws SQLException, BiffException, IOException
{
    Workbook wb = null;
    AssetManager asst = ctx.getAssets();

    wb = Workbook.getWorkbook(asst.open("words.xls"));

    ContentValues content = new ContentValues();
    Sheet sh = wb.getSheet(0);
    final int rows = sh.getRows() - 1;
    final int columns = sh.getColumns() - 1;

    Cell a1;
    for (int i = 1; i <= rows; i++) {
            for (int j = 1; j <= columns; j++) {
                a1 = sh.getCell(j,i);
                String str = a1.getContents();
                if (j == 1) content.put(DBAdapter.ATT_WORD, str);
                if (j == 2) content.put(DBAdapter.ATT_T1, str);
                if (j == 3) content.put(DBAdapter.ATT_T2, str);
                if (j == 4) content.put(DBAdapter.ATT_T3, str);
                if (j == 5) content.put(DBAdapter.ATT_T4, str);
                if (j == 6) content.put(DBAdapter.ATT_T5, str);
                if (j == 7) content.put(DBAdapter.ATT_RECENT, (int)0);
                if (j == 8) content.put(DBAdapter.ATT_RATING, (int)0);
            }
            DBAdapter.db.insert(DBAdapter.WORDS_TABLE, "NULL", content);
        }
    }
public void WordPopulate(Context ctx)抛出SQLException、BiffeException、IOException
{
工作簿wb=null;
AssetManager asst=ctx.getAssets();
wb=Workbook.getWorkbook(asst.open(“words.xls”);
ContentValues content=新ContentValues();
表sh=wb.getSheet(0);
final int rows=sh.getRows()-1;
final int columns=sh.getColumns()-1;
细胞a1;
对于(inti=1;i您的代码

private static final String WORDS_CREATE =
    "create table words (_id primary key autoincrement, word text, "
    + "T1 text, T2 text, T3 text, T4 text, T5 text, "
    + "recent integer, rating integer);";
应该是

private static final String WORDS_CREATE =
    "create table words (_id integer primary key autoincrement, word text, "
    + "T1 text, T2 text, T3 text, T4 text, T5 text, "
    + "recent integer, rating integer);";
private static final String SETTINGS_CREATE =
    "create table settings (_id integer primary key autoincrement, uid text, sid text, "
    +"type text, duration integer, ptsToWin integer, "
    +"foreign key (uid) references user (uid));";
更正为“\u id整数主键”

不是错误,但为了一致性,我认为

private static final String SETTINGS_CREATE =
    "create table settings (_id integer primary key autoincrement, uid text, sid text, "
    +"type text, duration integer, ptsToWin integer, "
    +"foreign key (uid) references user (uid));"
    ;
应该是

private static final String WORDS_CREATE =
    "create table words (_id integer primary key autoincrement, word text, "
    + "T1 text, T2 text, T3 text, T4 text, T5 text, "
    + "recent integer, rating integer);";
private static final String SETTINGS_CREATE =
    "create table settings (_id integer primary key autoincrement, uid text, sid text, "
    +"type text, duration integer, ptsToWin integer, "
    +"foreign key (uid) references user (uid));";
更改是最后分号的位置。

您的代码

private static final String WORDS_CREATE =
    "create table words (_id primary key autoincrement, word text, "
    + "T1 text, T2 text, T3 text, T4 text, T5 text, "
    + "recent integer, rating integer);";
应该是

private static final String WORDS_CREATE =
    "create table words (_id integer primary key autoincrement, word text, "
    + "T1 text, T2 text, T3 text, T4 text, T5 text, "
    + "recent integer, rating integer);";
private static final String SETTINGS_CREATE =
    "create table settings (_id integer primary key autoincrement, uid text, sid text, "
    +"type text, duration integer, ptsToWin integer, "
    +"foreign key (uid) references user (uid));";
更正为“\u id整数主键”

不是错误,但为了一致性,我认为

private static final String SETTINGS_CREATE =
    "create table settings (_id integer primary key autoincrement, uid text, sid text, "
    +"type text, duration integer, ptsToWin integer, "
    +"foreign key (uid) references user (uid));"
    ;
应该是

private static final String WORDS_CREATE =
    "create table words (_id integer primary key autoincrement, word text, "
    + "T1 text, T2 text, T3 text, T4 text, T5 text, "
    + "recent integer, rating integer);";
private static final String SETTINGS_CREATE =
    "create table settings (_id integer primary key autoincrement, uid text, sid text, "
    +"type text, duration integer, ptsToWin integer, "
    +"foreign key (uid) references user (uid));";

更改是最后分号的位置。

PS-它发生在循环中insert语句的每个实例中。下面是LogCat输出的示例-错误/数据库(28543):插入T4=CITRUS T5=PILLS word=Vitamin C rating=0 T1=NUTRITION recent=0 T3=ORANGES T2=Cold时出错在我看来,您正在尝试添加重复的唯一值。这可能会导致
SQLiteConstraintException
。填充方法仅作用于“words”表,我认为唯一的唯一约束应该是\u id,它应该在每个insertThat上自动递增,或者在循环中的每个insert语句实例上都会出现无效的外键.PS:插入T4=CITRUS T5=PILLS word=Vitamin C rating=0 T1=NUTRITION recent=0 T3=ORANGES T2=Cold时出错在我看来,您正在尝试添加重复的唯一值。这可能会导致
SQLiteConstraintException
。填充方法仅作用于“words”表,我认为唯一的唯一约束应该是\u id,它应在每个insertThat或无效外键上自动递增。