问题描述
我想从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 (将#修改为@)