如何在我的游戏SQLite中保存高分和时间

时间:2017-02-25 22:28:37

标签: java android sqlite android-sqlite

我有一个游戏,其中我想要获得前10名结果,结果将由2件事组成 - 难度(简单,中等,难度)和得分(整数)。到目前为止,我正在努力了解这个SQLite如何在Android工作室中运行,我仍然感到困惑,但在阅读了几个教程后,我设法将它放在一起:DBHandler类

public class DBHandler extends SQLiteOpenHelper {

private static final int DATABASE_VERSION = 1;

private static final String DATABASE_NAME = "highscores";

private static  final String TABLE_DETAIL = "scores";

private static  final String KEY_ID = "id";
private static  final String KEY_TIME = "time";
private static  final String KEY_DIFFICULTY = "difficutly";


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

@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_HIGHSCORES_TABLE = "CREATE TABLE" + TABLE_DETAIL + "("
            + KEY_ID + " INTEGER PRIMARY KEY, "
            + KEY_TIME + " TEXT, "
            + KEY_DIFFICULTY + " TEXT, ";
    db.execSQL(CREATE_HIGHSCORES_TABLE);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_DETAIL);     // tova maha starata tablica ako s16testvuva

    onCreate(db);                                           // tova q pravi nanovo
}
// Adding new score
public void addScore(int score) {

    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();

    values.put(KEY_TIME, score); // score value

    // Inserting Values
    db.insert(TABLE_DETAIL, null, values);

    db.close();

}

// Getting All Scores
public String[] getAllScores() {

    // Select All Query
    String selectQuery = "SELECT  * FROM " + TABLE_DETAIL;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list

    int i = 0;

    String[] data = new String[cursor.getCount()];

    while (cursor.moveToNext()) {

        data[i] = cursor.getString(1);

        i = i++;

    }
    cursor.close();
    db.close();
    // return score array
    return data;
}
}

下面的这个课程,我不知道为什么它甚至是必需的,但我在每个教程中都看到了它,所以我复制了它......

public class Contact {

//private variables
int _id;
String difficulty;
String time;

// Empty constructor
public Contact(){

}
// constructor
public Contact(int id, String name, String _phone_number){
    this._id = id;
    this.difficulty = name;
    this.time = _phone_number;
}

// constructor
public Contact(String name, String _phone_number){
    this.difficulty = name;
    this.time = _phone_number;
}
// getting ID
public int getID(){
    return this._id;
}

// setting id
public void setID(int id){
    this._id = id;
}

// getting name
public String getName(){
    return this.difficulty;
}

// setting name
public void setName(String name){
    this.difficulty = name;
}

和最后一堂课

public class highscores extends Activity {

private ListView scorebox;

@Override
protected void onCreate(Bundle savedInstanceState) {
    DBHandler db = new DBHandler(this);
    scorebox = (ListView) findViewById(R.id.scorebox);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.highscores);
    Log.d("Insert: ", "Inserting ..");
    db.addScore(9000);
    Log.d("Reading: ", "Reading all contacts..");
}
}

我尝试在最后一个类中放置一些数据来测试数据库,但是当我单击按钮打开数据库时应用程序崩溃,这就是我放弃并决定寻求帮助的地方。 错误很长:

FATAL EXCEPTION: main
              Process: com.example.user.myapplication, PID: 24731
              java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.user.myapplication/com.example.user.myapplication.highscores}: android.database.sqlite.SQLiteException: near "TABLEscores": syntax error (code 1): , while compiling: CREATE TABLEscores(id INTEGER PRIMARY KEY, time TEXT, difficutly TEXT,
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
                  at android.app.ActivityThread.-wrap12(ActivityThread.java)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
                  at android.os.Handler.dispatchMessage(Handler.java:102)
                  at android.os.Looper.loop(Looper.java:154)
                  at android.app.ActivityThread.main(ActivityThread.java:6119)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
               Caused by: android.database.sqlite.SQLiteException: near "TABLEscores": syntax error (code 1): , while compiling: CREATE TABLEscores(id INTEGER PRIMARY KEY, time TEXT, difficutly TEXT,
                  at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
                  at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
                  at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
                  at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
                  at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
                  at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
                  at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1677)
                  at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1608)
                  at com.example.user.myapplication.DBHandler.onCreate(DBHandler.java:34)
                  at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:251)
                  at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
                  at com.example.user.myapplication.DBHandler.addScore(DBHandler.java:46)
                  at com.example.user.myapplication.highscores.onCreate(highscores.java:25)
                  at android.app.Activity.performCreate(Activity.java:6679)
                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 
                  at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 
                  at android.os.Handler.dispatchMessage(Handler.java:102) 
                  at android.os.Looper.loop(Looper.java:154) 
                  at android.app.ActivityThread.main(ActivityThread.java:6119) 
                  at java.lang.reflect.Method.invoke(Native Method) 
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

1 个答案:

答案 0 :(得分:1)

您的sql中存在语法错误。

  

android.database.sqlite.SQLiteException:near&#34; TABLEscores&#34 ;:语法错误(代码1):,编译时:CREATE TABLEscores(id INTEGER PRIMARY KEY,time TEXT,difficutly TEXT,

它应该是TABLE之后的空格。