У меня есть некоторые проблемы при получении данных из базы данных SQLite - PullRequest
0 голосов
/ 26 декабря 2018

Я создаю нормальное приложение для Android, в котором я пытаюсь получить данные, используя базу данных Sqlite, но значения не извлекаются, скажите, пожалуйста, где я ошибаюсь?

activity_main.xml

   <Button
        android:id="@+id/button_viewAll"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="View Details"
               />

DatabaseHelper Class

   public static final String DATABASE_NAME = "Gym.db";
   public static final String TABLE_NAME = "Exercise";
   public static final String COL_1 = "exercise_id";
   public static final String COL_2 = "exercise_name";
   public static final String COL_3 = "body_part";
   public static final String COL_4 = "description";

    public DatabaseHelper( Context context) {
    super(context, DATABASE_NAME, null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {

    db.execSQL("create table " + TABLE_NAME +" (exercise_id INTEGER PRIMARY KEY AUTOINCREMENT,exercise_name TEXT,body_part TEXT,description TEXT)");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
    onCreate(db);
}
public Cursor getAllData() {
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor res = db.rawQuery("select * from "+TABLE_NAME, null);
    return res;
}
}

MainActivity.java

 public class MainActivity extends AppCompatActivity {
   DatabaseHelper myDb;
   Button texercise_id, texercise_name, tbody_part, tdescription;

Button btnviewAll;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    myDb = new DatabaseHelper(this);

    texercise_id = (Button)findViewById(R.id.button_viewAll);
    texercise_name = (Button)findViewById(R.id.button_viewAll);
    tbody_part = (Button)findViewById(R.id.button_viewAll);
    tdescription = (Button)findViewById(R.id.button_viewAll);
    btnviewAll = (Button)findViewById(R.id.button_viewAll);
    viewAll();
}
public void viewAll() {
    btnviewAll.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    Cursor res = myDb.getAllData();
                    if(res.getCount() == 1) {
                        // show message
                        showMessage("Error","Nothing found");
                        return;
                    }

                    StringBuffer buffer = new StringBuffer();
                    while (res.moveToNext()) {
                        buffer.append("exercise_id :"+ res.getString(0)+"\n");
                        buffer.append("exercise_name :"+ res.getString(1)+"\n");
                        buffer.append("body_part :"+ res.getString(2)+"\n");
                        buffer.append("description :"+ res.getString(3)+"\n\n");
                    }

                    // Show all data
                    showMessage("Data Found",buffer.toString());
                }
            }
    );
}
public void showMessage(String title,String Message){
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setCancelable(true);
    builder.setTitle(title);
    builder.setMessage(Message);
    builder.show();
}


}

Я пробовал и раньше, но этота же проблема, с которой я сталкиваюсь при получении данных из базы данных SQLite.

1 Ответ

0 голосов
/ 27 декабря 2018

Из вашего кода видно, что все работает нормально. Однако , похоже, не добавлено ни данных, ни средств для добавления данных.Таким образом, диалоговое окно не показывает никаких данных, НО это не показывает сообщение, которое не указывает никаких данных.

1.Исправьте диалоговое окно, чтобы указать отсутствие данных

Чтобы исправить диалоговое окно, показывающее отсутствие данных, необходимо проверить, есть ли в курсоре не строки, а не 1 строка.Поэтому измените строку: -

if(res.getCount() == 1) { 

на

if(res.getCount() < 1) {

2.Добавьте некоторые данные, чтобы отобразить данные

Чтобы отобразить некоторые данные, необходимо добавить некоторые данные.Чтобы добавить некоторые данные, вы можете иметь метод в классе DatabaseHelper , который позволяет добавлять данные.Например: -

public long addData(String excercise_name, String body_part, String description) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put(COL_2,excercise_name);
    cv.put(COL_3,body_part);
    cv.put(COL_4,body_part);
    return db.insert(TABLE_NAME,null,cv);
}

Затем вам нужно будет на самом деле добавить некоторые данные, например, к вашей MainActivity можно добавить следующий метод: -

private void addSomeDataButOnlyIfNoneExists() {
    if (DatabaseUtils.queryNumEntries(myDb.getWritableDatabase(),DatabaseHelper.TABLE_NAME) < 1) {
        myDb.addData("Squat","Legs","Squat");
        myDb.addData("Push up","Arms","Push up");
        myDb.addData("Run","Legs and Arms","Rapidly put one foot in front of the other");
    }
}
  • Обратите внимание, что это просто добавит вышеуказанные данные один раз (первая строка проверяет, существуют ли данные).

Вы можете вызвать метод, используя: -

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    myDb = new DatabaseHelper(this);
    addSomeDataButOnlyIfNoneExists(); //<<<<<<<<<< ADDED

   ........ rest of your code

Результат (с данными)

с использованием вышеуказанного, запуском приложения и нажатием кнопки View Details приводит к: -

enter image description here

...