如何解决 android.database.sqlite.SQLiteException: no such table error?

时间:2021-07-31 08:45:10

标签: java android sqlite android-studio insert

我一直在 Android Studio 上构建一个医生的应用程序,并使用 SQLite 数据库来存储数据。其中,有一项活动,医生可以在其中管理预约。这就是界面的样子。 The Manage Appointments Activity

所以我一直在使用编码从用户那里获取输入,并将其存储在 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();
            }
        });

但是,当我运行模拟器并插入数据时,我收到吐司消息“未添加约会”。我正在调试,似乎问题是值没有插入到数据库中。我的 DBHelper 类的 insert 方法中的 appmntRes 返回 -1,这意味着数据插入失败。为什么会这样?我创建第二个表的方式有问题吗?非常感谢您的帮助。

提前致谢!!

编辑:我刚刚在运行我的应用程序时检查了 logcat 并收到消息 android.database.sqlite.SQLiteException: no such table: appointments

为什么我的第二个表没有被创建?请帮忙。

1 个答案:

答案 0 :(得分:0)

在分析您的代码后,我认为您需要在操作后关闭数据库,并且正在保存数据但您没有得到正确的响应。所以这里是我认为需要进行的更改.

改变:

$('#form').on('submit', function (e) {
  e.preventDefault();
  var values = {};
  $.each($('#myForm').serializeArray(), function(i, field) {
    values[field.name] = field.value;
  });
  if (values['age'] < 10 || values['age'] >12) { return; }
  $(this).submit();
})

Boolean check;
check.booleanValue();

并且在你的数据库中使用后需要关闭,所以在方法insertappointment()中在操作结束时使用:

boolean check

这样就关闭了与数据库的连接