Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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
Android 尝试使用SQlite创建表时出错_Android_Sqlite - Fatal编程技术网

Android 尝试使用SQlite创建表时出错

Android 尝试使用SQlite创建表时出错,android,sqlite,Android,Sqlite,我很难创建三个表并向其中插入值 SQlite查询是正确的,因为在我尝试创建三个表并向其中插入值之前,它只处理一个表 另外,我只放了GameOver类的一部分,并声明了数据类型。 谢谢你的帮助 import static com.avrahamzilberblat.battleshipfinal.Constants.COL1; import static com.avrahamzilberblat.battleshipfinal.Constants.COL2; import static com.

我很难创建三个表并向其中插入值

SQlite查询是正确的,因为在我尝试创建三个表并向其中插入值之前,它只处理一个表

另外,我只放了GameOver类的一部分,并声明了数据类型。 谢谢你的帮助

import static com.avrahamzilberblat.battleshipfinal.Constants.COL1;
import static com.avrahamzilberblat.battleshipfinal.Constants.COL2;
import static com.avrahamzilberblat.battleshipfinal.Constants.COL3;
import static com.avrahamzilberblat.battleshipfinal.Constants.TABLE_NAME_Easy;
import static com.avrahamzilberblat.battleshipfinal.Constants.TABLE_NAME_Hard;
import static com.avrahamzilberblat.battleshipfinal.Constants.TABLE_NAME_Normal;
import static com.avrahamzilberblat.battleshipfinal.Constants.TAG;

public class DatabaseHelper extends SQLiteOpenHelper {


    public DatabaseHelper(Context context,String tableName) {

        super(context, tableName, null, 5);

        SQLiteDatabase dbEasy=this.getWritableDatabase();
        SQLiteDatabase dbNormal=this.getWritableDatabase();
        SQLiteDatabase dbHard=this.getWritableDatabase();
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        db.execSQL("CREATE TABLE " + TABLE_NAME_Hard + " (ID INTEGER PRIMARY KEY, " +
                COL2 +" TEXT,"+COL3+" REAL)");
        db.execSQL("CREATE TABLE " + TABLE_NAME_Normal + " (ID INTEGER PRIMARY KEY, " +
                COL2 +" TEXT,"+COL3+" REAL)");
        db.execSQL("CREATE TABLE " + TABLE_NAME_Hard + " (ID INTEGER PRIMARY KEY, " +
                COL2 +" TEXT,"+COL3+" REAL)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int i, int i1) {
        db.execSQL("DROP IF TABLE EXISTS " + TABLE_NAME_Easy);
        onCreate(db);
    }

    public boolean addData(String tableName,PlayerDetails playerDetails) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(COL2,playerDetails.getWinnerName());
        contentValues.put(COL3, playerDetails.getRatio());


        long result = db.insert(tableName, null, contentValues);

        //if date as inserted incorrectly it will return -1
        if (result == -1) {
            return false;
        } else {
            return true;
        }
    }


您正在尝试第二次创建相同的表(_Hard)。看起来你想轻松地创建。以下更改是我认为您想要的:-

@Override
public void onCreate(SQLiteDatabase db) {

    db.execSQL("CREATE TABLE " + TABLE_NAME_Easy + " (ID INTEGER PRIMARY KEY, " +
            COL2 +" TEXT,"+COL3+" REAL)");
    db.execSQL("CREATE TABLE " + TABLE_NAME_Normal + " (ID INTEGER PRIMARY KEY, " +
            COL2 +" TEXT,"+COL3+" REAL)");
    db.execSQL("CREATE TABLE " + TABLE_NAME_Hard + " (ID INTEGER PRIMARY KEY, " +
            COL2 +" TEXT,"+COL3+" REAL)");
}
请注意,进行更改后,您需要在重新运行应用程序之前执行以下操作之一:-

  • 通过设置/应用删除(清除)应用的数据
  • 卸载应用程序

    • 注意:增加版本号不起作用,因为onUpGrade方法中的代码不会删除所有表
  • 另外,为难度设置一个指标(简单、正常、困难)会更简单/更好,因此一个表而不是三个表(允许您更容易地说选择所有bu-Easy,例如,从一个表中选择*,其中难度='Normal'或难度='Hard')

    • 注:尽管上述使用文本/字符串表示困难,但使用整数(例如0表示简单,2表示正常,4表示困难)会更有效

    您尝试创建两次表格
    表格名称\u Hard
    ,将第一条语句更改为
    表格名称\u Easy
    卸载应用程序,以便删除数据库并重新运行。
    @Override
    public void onCreate(SQLiteDatabase db) {
    
        db.execSQL("CREATE TABLE " + TABLE_NAME_Easy + " (ID INTEGER PRIMARY KEY, " +
                COL2 +" TEXT,"+COL3+" REAL)");
        db.execSQL("CREATE TABLE " + TABLE_NAME_Normal + " (ID INTEGER PRIMARY KEY, " +
                COL2 +" TEXT,"+COL3+" REAL)");
        db.execSQL("CREATE TABLE " + TABLE_NAME_Hard + " (ID INTEGER PRIMARY KEY, " +
                COL2 +" TEXT,"+COL3+" REAL)");
    }