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 库,可能对调试有用
我想使用 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 库,可能对调试有用