Не удается разрешить символ DatabaseHelper

Итак, я следовал учебному пособию и пытался заставить его работать с моей базой данных sql. Таким образом, кажется, что нет ошибки, но это красные слова (Gljive, они выделены жирным шрифтом). Должно быть имя класса или как? Я поместил базовое слово (gljive, означает гриб на моем языке). Я не написал все свои столбцы, потому что я не хочу писать их все, если это не сработает.. Я просто хочу загрузить базу данных, а затем заполнить определенный столбец в определенных счетчиков. Программа показывает, что не может разрешить символ Gljive.

package com.example.shromid;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;

public class DatabaseHelper extends SQLiteAssetHelper {

//DB info
private static final String DB_NAME = "gljive.db";
private static final int DB_VERSION = 1;

//Table GLJIVE
public static final String TABLE_GLJIVE = "gljive";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_NAZIV = "Naziv";
public static final String COLUMN_KBOJA = "Klobuk_Boja";
public static final String COLUMN_KOBLIK = "Klobuk_Oblik";
public static final String COLUMN_KTEKSTURA = "Klobuk_Tekstura";
public static final String COLUMN_LBOJA = "Listici_Boja";
public static final String COLUMN_SOBLIK = "Strucak_Oblik";
public static final String COLUMN_SDNO = "Strucak_Dno";
public static final String COLUMN_MBOJA = "Meso_Boja";
public static final String COLUMN_MMIRIS = "Meso_Miris";
public static final String COLUMN_STANISTE = "Staniste";
public static final String COLUMN_SGRUPA = "Staniste_Grupa";
public static final String COLUMN_UPOTREBLJIVOST = "Upotrebljivost";

private static final String orderBy = DatabaseHelper.COLUMN_NAZIV + " ASC ";

private Context mContext;
private SQLiteDatabase mDB;

public DatabaseHelper(Context context) {
    super(context, DB_NAME, null, DB_VERSION);
    mContext = context;
    setForcedUpgradeVersion();
}

public **Gljive** getGljiveById(int id) {
    **Gljive** gljive = null;

    SQLiteDatabase db = getReadableDatabase();

    Cursor cursor = db.query(
            DatabaseHelper.TABLE_GLJIVE, null, DatabaseHelper.COLUMN_ID + " = 1 ",
            new String[]{String.valueOf(1)}, null, null, orderBy);
    if (cursor != null) {
        cursor.moveToFirst();
        gljive = cursorToGljive(cursor);
        cursor.close();
    }

    return gljive;
}

public **Gljive** getGljiveByNaziv(String Naziv) {
    **Gljive** gljive = null;

    SQLiteDatabase db = getReadableDatabase();

    Cursor cursor = db.query(
            DatabaseHelper.TABLE_GLJIVE, null, DatabaseHelper.COLUMN_NAZIV + " 2",
            new String[]{name}, null, null, null);
    if (cursor != null) {
        cursor.moveToFirst();
        gljive = cursorToGljive(cursor);
        cursor.close();
    }

    return gljive;
}

public List<**Gljive**> getGljiveByKBoja(String Klobuk_Boja) {
    List<**Gljive**> gljive = new ArrayList<Gljive>();
    SQLiteDatabase db = getReadableDatabase();
    Cursor cursor = db.query(
            DatabaseHelper.TABLE_GLJIVE, null, DatabaseHelper.COLUMN_KBOJA + " 3 ",
            new String[]{COLUMN_KBOJA}, null, null, orderBy);
    if (cursor != null) {
        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {
            Gljive gljive = cursorToGljive(cursor);
            gljive.add(gljive);
            cursor.moveToNext();
        }
        cursor.close();
    }

    return gljive;
}

private **Gljive** cursorToGljive(Cursor cursor){
    **Gljive** gljive= new Gljive();

    return gljive;
}
}

1 ответ

Решение

public Gljive getGljiveById (int id) {....}

Говорит определить публичный метод под названием getGljiveById, который возвращает объект Gljive.

Чтобы иметь объект Gljive, вам нужен класс с именем Gljive

Должно быть имя класса или как?

Да, так что создайте файл с именем Gljive.java а затем есть что-то вроде следующего:

public class Gljive {
    private long mId;
    private String mNaziv' // etc for all the properties (columns)

    // Constructor 
    public Gljive(String naziv, ) {
        this.mNaziv = naziv
    }

    // Setters/getters
    public long getId() {
        return this.mId;
    }
    public void setId(long id) {
        this.mId = id;
    }

    public String getNaziv() {
        return this.Naziv;
    }
    .... etc
}

Используя вышеупомянутый (сокращенный) класс Gljive, который вы могли бы использовать в другом месте (например, в вашем Помощнике по базам данных):-

//Create(construct) a Gljive instance
Gljive my_first_gljive = new Gljive("Button"); // Creates an instance using the constructor
my_first_gljive.setId(100); // Sets the mId for this instance to 100
String gljive_name_to_print = my_first_gljive.getNaziv();

Большая часть вашего кода должна была бы затем включать в себя / использовать объекты Gljive, например cursorToGljive не может быть:-

private Gljive cursorToGljive(Cursor cursor){
    Gljive gljive= new Gljive();
    return gljive;
}

Это было бы в соответствии с (на основе сокращенного Gljive выше):

private Gljive cursorToGljive(Cursor cursor){
    Gljive gljive= new Gljive(
        cursor.getString(cursor.getColumnIndex(COLUMN_NAZIV)
    );
    gljive.setId(cursor.getColumnIndex(COLUMN_ID)); //Note(1)
    return gljive;
}

Заметки

  • (1) У вас может быть конструктор (допускается несколько конструкторов, но с разными сигнатурами), который позволяет передавать идентификатор.

используя выше cursorToGljive метод и исправление некоторых ошибок другими методами в Database Helper может быть (см. комментарии):-

public Gljive getGljiveById(int id) {
    Gljive gljive = null;

    SQLiteDatabase db = getReadableDatabase();

    Cursor cursor = db.query(
            TABLE_GLJIVE, null, COLUMN_ID + "=?", //<<<< =? 
            new String[]{String.valueOf(id)},     //<<<< uses the passed id
            null, null, orderBy);
    if (cursor.moveToFirst()) {                   //<<<<< cursor will not be null
        gljive = cursorToGljive(cursor);
        cursor.close();
    }

    return gljive;
}

public Gljive getGljiveByNaziv(String Naziv) {
    Gljive gljive = null;

    SQLiteDatabase db = getReadableDatabase();

    Cursor cursor = db.query(
            TABLE_GLJIVE, null, COLUMN_NAZIV + "=?", //<<<< =?
            new String[]{Naziv},                     //<<<< use passed Naziv as argument
            null, null, null);
    if (cursor.moveToFirst()) {                      //<<<< cursor never null         
        gljive = cursorToGljive(cursor);
        cursor.close();
    }

    return gljive;
}

public List<Gljive> getGljiveByKBoja(String Klobuk_Boja) {
    List<Gljive> gljive = new ArrayList<>();
    SQLiteDatabase db = getReadableDatabase();
    Cursor cursor = db.query(
            TABLE_GLJIVE, null, COLUMN_KBOJA + "=?",  //<<<< =?
            new String[]{Klobuk_Boja},                //<<<< use passed value as argument 
            null, null, orderBy);
    while (cursor.moveToNext()) {                     // compact loop removed null check
        gljive.add(cursorToGljive(cursor))            // add Gljive object to List
    }
    cursor.close();
    return gljive;
}

Заметка! Это принципиальный код, он не был проверен, поэтому могут иметь ошибки. Более того, это укороченная версия, в основном обслуживающая нацистскую колонну. Gljive.java должен быть изменен, чтобы обслуживать всех членов (свойства), аналогично / соответственно cursorToGljive должны быть изменены.

Другие вопросы по тегам