游标计数为零,但Android中SQLite中存在数据

问题描述

我想从sqlite数据库访问数据,并且具有以下sqliteOpenHelper java类(importnant方法称为getData,位于该类的最后)

package com.example.td.barapp;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.sqliteDatabase;
import android.database.sqlite.sqliteOpenHelper;

import androidx.annotation.Nullable;

public class DataBaseHelper extends sqliteOpenHelper {

    public static final String DATABASE = "DrinksDB.db";
    public static final String TABLE_DRINKS = "table_drinks";
    public static final String TABLE_ratingS = "table_ratings";
    public static final String TABLE_INGREDIENTS = "table_ingredients";
    public static final String TABLE_INGREDIENTS_GERMAN = "table_ingredients_german";

    /*
    Variables for the table "Drinks"
     */
    public static final String DRINK_NAME = "Name";
    public static final String DRINK_NAME_GERMAN = "Name_German";
    public static final String DRINK_TYPE = "Drink_Type";

      /*
     Variables for the table "ratingS"
     */

    public static final String NUMBER_1STARS = "1_Star";
    public static final String NUMBER_2STARS = "2_Star";
    public static final String NUMBER_3STARS = "3_Star";
    public static final String NUMBER_4STARS = "4_Star";
    public static final String NUMBER_5STARS = "5_Star";

       /*
     Variables for the table "Ingredients"
     */

    public static final String NUMBER_OFINGREDIENTS = "Number Ingredients";
    public static final String INGREDIENT_1 = "Ingredient_1";
    public static final String INGREDIENT_2 = "Ingredient_2";
    public static final String INGREDIENT_3 = "Ingredient_3";
    public static final String INGREDIENT_4 = "Ingredient_4";
    public static final String INGREDIENT_5 = "Ingredient_5";
    public static final String INGREDIENT_6 = "Ingredient_6";
    public static final String INGREDIENT_7 = "Ingredient_7";
    public static final String INGREDIENT_8 = "Ingredient_8";

    public static final String INGREDIENT_1_GERMAN = "Ingredient_1_German";
    public static final String INGREDIENT_2_GERMAN = "Ingredient_2_German";
    public static final String INGREDIENT_3_GERMAN = "Ingredient_3_German";
    public static final String INGREDIENT_4_GERMAN = "Ingredient_4_German";
    public static final String INGREDIENT_5_GERMAN = "Ingredient_5_German";
    public static final String INGREDIENT_6_GERMAN = "Ingredient_6_German";
    public static final String INGREDIENT_7_GERMAN = "Ingredient_7_German";
    public static final String INGREDIENT_8_GERMAN = "Ingredient_8_German";



    public DataBaseHelper(@Nullable Context context) {
        super(context,DATABASE,null,1);

    }

    @Override
    public void onCreate(sqliteDatabase sqliteDatabase) {
        sqliteDatabase.execsql("create table " + TABLE_DRINKS + " (Name TEXT PRIMARY KEY,Name_German TEXT,Drink_Type TEXT   ) ");
    }

    @Override
    public void onUpgrade(sqliteDatabase sqliteDatabase,int i,int i1) {
        sqliteDatabase.execsql("DROP TABLE IF EXISTS " + TABLE_DRINKS);
        onCreate(sqliteDatabase);
    }

    public boolean insertDataDrinksDB (String name,String nameGerman,String type) {
        sqliteDatabase sqliteDatabase = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(DRINK_NAME,name);
        contentValues.put(DRINK_NAME_GERMAN,nameGerman);
        contentValues.put(DRINK_TYPE,type);
        long inserted = sqliteDatabase.insert(TABLE_DRINKS,contentValues);

        if (inserted==-1) {
            return false;
        }
        else
            return true;
    }

    public Cursor getData (String drinkname) {
        sqliteDatabase sqliteDatabase = this.getWritableDatabase();
        Cursor res = sqliteDatabase.rawQuery("select " +  DRINK_TYPE +" from " + TABLE_DRINKS + " where "
                + DRINK_NAME + "= ' " + drinkname + "'",null);
        return res;


    }


}

在主要活动中,我想通过使用此类访问数据库中的数据(重要行在onCreateMethod的末尾):

package com.example.td.barapp;

import android.content.Intent;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;

import android.database.Cursor;
import android.os.Bundle;

import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

import com.example.td.barapp.databinding.ActivityMain2Binding;
import com.example.td.barapp.databinding.ActivityMainBinding;


public class MainActivity extends AppCompatActivity  {

   DataBaseHelper drinksDB;
    private ActivityMain2Binding binding;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        drinksDB = new DataBaseHelper (this);
        boolean insert = drinksDB.insertDataDrinksDB("Orange Juice","Orangensaft","Softdrink");

        Cursor res = drinksDB.getData("Orange Juice");
        boolean getCountZero = res.getCount()==0;
        Log.e("LogTag","CountZero= " + getCountZero);

        String drinkType = res.getString(0);
        Toast.makeText(this,"DrinkType = " + drinkType,Toast.LENGTH_LONG).show();

    }



}

不幸的是,res.getCount()方法提供的计数为零,我不理解,因为当我在创建的数据库sql数据库程序中使用查询本身时,查询本身是正确的。另一个奇怪的方面是通话

String drinkType = res.getString(0); leads to the error message:

Index -1 requested,with a size of 0

它说我请求索引-1,尽管此方法的参数为0(即使当我使用20作为参数时,它仍然表示请求索引-1)。

有人会介意看看并告诉我我的错误是什么吗?如前所述,数据库本身是正确的。我会很感激每条评论,非常感谢您的帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)