如何解决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:没有这样的表错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何解决包冲突问题

如何解决包冲突问题

如何解决ajax跨域问题

MySQL 的 10048问题,如何解决?

如何解决smartgit的冲突问题

如何解决https传输图片的问题