Попытка понять SQLite. В чем ошибка?

Только начал изучать SQLite, я не могу понять, почему в данном случае у меня в лог выводится:

Log: ID = 0, score = 1, lvl = 2, trys = 3

Ссылается видимо на проблемы с именем таблицы?
E/SQLiteLog: (1) no such table: statistics

activity_main
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <LinearLayout
        android:id="@+id/linearLayout"
        android:layout_width="385dp"
        android:layout_height="70dp"
        android:orientation="horizontal"
        android:weightSum="3"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <Button
            android:id="@+id/btnAdd"

            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="AddDB"
            android:text="Записать"></Button>

        <Button
            android:id="@+id/btnRead"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="ReadfromDB"
            android:text="Читать"></Button>

        <Button
            android:id="@+id/btnClear"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="DeleteDB"
            android:text="Очистить"></Button>
    </LinearLayout>

    <LinearLayout
        android:layout_width="233dp"
        android:layout_height="161dp"
        android:orientation="vertical"
        app:layout_constraintBottom_toTopOf="@+id/linearLayout"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <EditText
            android:id="@+id/scoreText"
            android:hint="Очки"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPersonName" />

        <EditText
            android:id="@+id/lvlText"
            android:hint="Уровень"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPersonName" />

        <EditText
            android:id="@+id/tryText"
            android:hint="Попыток"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPersonName" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="264dp"
        android:layout_height="160dp"
        android:orientation="vertical"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/linearLayout">

        <TextView
            android:id="@+id/scoreView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/lvlView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tryView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="18sp" />
    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>


MainActivity
package freijer.app.sucktest;


import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity  {

    Button btnAdd, btnRead, btnClear;
    EditText scoreText, lvlText, tryText;
    TextView scoreView, lvlView, tryView;

    DataBaseHelper dbh;

    String score;
    String lvl;
    String trys;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnAdd =  findViewById(R.id.btnAdd);
        btnRead =  findViewById(R.id.btnRead);
        btnClear =  findViewById(R.id.btnClear);

        scoreText =  findViewById(R.id.scoreText);
        lvlText =  findViewById(R.id.lvlText);
        tryText =  findViewById(R.id.tryText);

        scoreView = findViewById(R.id.scoreView);
        lvlView = findViewById(R.id.lvlView);
        tryView = findViewById(R.id.tryView);

        score = scoreText.getText().toString();
        lvl = lvlText.getText().toString();
        trys = tryText.getText().toString();

        dbh = new DataBaseHelper(this);


    }

        public void AddDB(View v) {
        dbh.AddDataBase(score, lvl, trys);
        }

        public void ReadfromDB(View v) {
              dbh.ReadFromDataBase();
        }

         public void DeleteDB(View v){
             dbh.CleanDB();
        }
}


DataBaseHelper
package freijer.app.sucktest;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DataBaseHelper extends SQLiteOpenHelper {
    public static final int DB_VERSION = 1;
    public static final String DB_NAME = "player";
    public static final String TABLE_NAME = "statistics";

    public static final String KEY_ID = "_id";
    public static final String COLUM_SCORE = "score";
    public static final String COLUM_LVL = "lvl";
    public static final String COLUM_TRYS = "trys";


    public DataBaseHelper(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) { //    Создаем таблицу:
        db.execSQL("create table " + TABLE_NAME + "( " + KEY_ID + " INTEGER PRIMARY KEY, " + COLUM_SCORE + " TEXT, " + COLUM_LVL + " TEXT, " + COLUM_TRYS + " TEXT " + ")");

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }

    public void AddDataBase(String score, String lvl, String trys) {
        ContentValues contentValues = new ContentValues();
        SQLiteDatabase database = this.getWritableDatabase();

        contentValues.put(COLUM_SCORE, score);
        contentValues.put(COLUM_LVL, lvl);
        contentValues.put(COLUM_TRYS, trys);

        database.insert(TABLE_NAME, null, contentValues);
        database.close();
    }

    public void  ReadFromDataBase(){
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.query(TABLE_NAME, null, null, null, null, null, null);

        if (cursor.moveToFirst()) {
            int id = cursor.getColumnIndex(KEY_ID);
            int lvl = cursor.getColumnIndex(COLUM_LVL);
            int score = cursor.getColumnIndex(COLUM_SCORE);
            int trys = cursor.getColumnIndex(COLUM_TRYS);
            do {
                Log.d("Log",
                        "ID = " + id +
                        ", score = " + score +
                        ", lvl = " + lvl +
                        ", trys = " + trys);
            } while (cursor.moveToNext());
        } else
            cursor.close();
    }

    public void CleanDB(){
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(TABLE_NAME, null, null);
        db.close();
    }
}
  • Вопрос задан
  • 186 просмотров
Решения вопроса 1
BitNeBolt
@BitNeBolt
Вы забыли про точку с запятой в конце запроса к базе на создание.

Должно быть так:
db.execSQL("create table " + TABLE_NAME + "( " + KEY_ID + " INTEGER PRIMARY KEY, " + COLUM_SCORE + " TEXT, " + COLUM_LVL + " TEXT, " + COLUM_TRYS + " TEXT " + ");");


И проверьте синтаксис в других командах, на всякий случай.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы