如何解决android.database.sqlite.SQLiteException:没有这样的表错误?
Posted
技术标签:
【中文标题】如何解决android.database.sqlite.SQLiteException:没有这样的表错误?【英文标题】:How to resolve android.database.sqlite.SQLiteException: no such table error? 【发布时间】:2021-10-06 13:33:18 【问题描述】:我一直在 android Studio 上构建一个医生的应用程序,并使用 SQLite 数据库来存储数据。在其中,有一个活动,医生可以在其中管理他的约会。这就是界面的样子。
所以我一直在使用编码来获取用户的输入,并将其存储在 SQLite 数据库中。目前我的数据库中有两个表。一个有登录详细信息,另一个应该有约会详细信息。这是我的 DBHelper 类。
package com.example.doctorsapp;
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 DBHelper extends SQLiteOpenHelper
public DBHelper(Context context)
super(context,"Login.db", null, 1);
@Override
public void onCreate(SQLiteDatabase myDB)
myDB.execSQL("create Table users(username Text primary key, password Text)");
myDB.execSQL("create Table appointments(patientName Text, patientAge Text, appointmentDate Text, Time Text, Number Text)");
@Override
public void onUpgrade(SQLiteDatabase myDB, int oldVersion, int newVersion)
myDB.execSQL("drop Table if exists users");
myDB.execSQL("drop Table if exists appointments");
这是将数据添加到数据库的方法
public Boolean insertappointment(String patientName, String patientAge, String appointmentDate, String Time, String Number)
SQLiteDatabase myDB = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("patientName", patientName);
contentValues.put("patientAge", patientAge);
contentValues.put("appointmentDate", appointmentDate);
contentValues.put("Time", Time);
contentValues.put("Number", Number);
long appmntRes = myDB.insert("appointments", null,contentValues);
if(appmntRes == -1)
return false;
else
return true;
这是 ManageAppointments 类
package com.example.doctorsapp;
import androidx.appcompat.app.AppCompatActivity;
import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TimePicker;
import android.widget.Toast;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
public class ManageAppointments extends AppCompatActivity
EditText patientName, patientAge,appointmentDate, Time, Number;
Button btnAddAppointment, btnUpdateAppointment, btnDeleteAppointment, btnViewAppointment;
Calendar calendar = Calendar.getInstance();
DBHelper myDB;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_manage_appointments);
patientName = findViewById(R.id.patientName);
patientAge = findViewById(R.id.patientAge);
appointmentDate = findViewById(R.id.appointmentDate);
Time = findViewById(R.id.Time);
Number = findViewById(R.id.Number);
btnAddAppointment = findViewById(R.id.btnAddAppointment);
btnUpdateAppointment = findViewById(R.id.btnUpdateAppointment);
btnDeleteAppointment = findViewById(R.id.btnDeleteAppointment);
btnViewAppointment = findViewById(R.id.btnViewAppointment);
btnAddAppointment.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
myDB = new DBHelper(ManageAppointments.this);
Boolean check = myDB.insertappointment(patientName.getText().toString().trim(), patientAge.getText().toString().trim(),
appointmentDate.getText().toString().trim(),Time.getText().toString().trim(),Number.getText().toString().trim());
if(check == true)
Toast.makeText(ManageAppointments.this, "Appointment Added",Toast.LENGTH_SHORT).show();
else
Toast.makeText(ManageAppointments.this, "Appointment Not Added",Toast.LENGTH_SHORT).show();
);
但是,当我运行模拟器并插入数据时,我收到了 toast 消息“未添加约会”。我正在调试,似乎问题是值没有插入到数据库中。我的 DBHelper 类的 insert 方法中的 appmntRes 返回 -1,这意味着数据插入失败。为什么会这样?我创建第二张表的方式有问题吗?非常感谢您的帮助。
提前致谢!!
编辑:我刚刚在运行我的应用程序时检查了 logcat,我收到了消息 android.database.sqlite.SQLiteException: no such table: appointments
为什么没有创建我的第二个表?请帮忙。
【问题讨论】:
我在这里测试过并且工作正常,我会给你一些提示,当我更新数据库时,我通常卸载应用程序并重新安装,有一个帮助检查的指南查询。看看这里:developer.android.com/studio/inspect/database 【参考方案1】:分析您的代码后,我认为您需要在操作后关闭数据库,并且正在保存数据但您没有得到正确的响应。所以这里是我认为需要进行的更改.
改变:
Boolean check;
check.booleanValue();
到
boolean check
并且在你的数据库中使用后需要关闭,所以在方法insertappointment()中使用在操作结束时:
myDB.close;
这样就关闭了与数据库的连接
【讨论】:
不,它不起作用:(他们抛出了错误以上是关于如何解决android.database.sqlite.SQLiteException:没有这样的表错误?的主要内容,如果未能解决你的问题,请参考以下文章