Android 中的数据未插入 SQLite 数据库

Data not inserted in SQLite database in Android

我想使用 SQLiteOpenHelper 在 Android 的 SQL 数据库中设置和插入数据。我有以下 SQLHelperClass(按照 youtube 教程:https://www.youtube.com/watch?v=T0ClYrJukPA

package com.example.td.barapp;

import android.content.ContentValues;
import android.content.Context;
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, null, contentValues);

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


}

我实现了方法“public boolean insertDataDrinksDB(见代码末尾)。然后在主要 activity 我使用以下代码插入一些数据:

package com.example.td.barapp;

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

import android.os.Bundle;

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("Apple Juice", "Apfelsaft", "Softdrink");

        if (insert==true) {
            Toast.makeText(this, "Data inserted", Toast.LENGTH_LONG).show();
        }
        if (insert==false) {
            Toast.makeText(this, "Data not inserted", Toast.LENGTH_LONG).show();
        }



    }
    


}

当我启动该应用程序时,我总是收到 Toast 消息,指出未插入数据,但我没有看到我的错误。此外,当我插入数据时,数据库似乎并没有变大,因此数据似乎没有被插入。你介意告诉我我犯了什么错误吗?我会很感激每一条评论。

根据评论和真实答案进行编辑:

我已经复制了您的代码,并且运行良好。好吧,第一次,因为每个下一个 insertDataDrinksDB 调用(下一个应用程序/Activity 开始)尝试插入具有已经存在的 PRIMARY_KEY 值的查询,这应该是更新,而不是插入

下面之前的错误答案,在这个答案下评论:

你能确认这个table创建正确吗?

sqLiteDatabase.execSQL("create table " + TABLE_DRINKS + "(Name TEXT PRIMARY KEY, Name_German TEXT, Drink_Type TEXT   ) ");

TABLE_DRINKS之后没有space,所以框架可能认为table的名字是TABLE_DRINKS +"(Name""TEXT"后面的是列名,这不正确...(列类型的受限名称)

还检查 Android-Debug-Database 库,可能对调试有用