我一直在 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();
}
});
但是,当我运行模拟器并插入数据时,我收到吐司消息“未添加约会”。我正在调试,似乎问题是值没有插入到数据库中。我的 DBHelper 类的 insert 方法中的 appmntRes 返回 -1,这意味着数据插入失败。为什么会这样?我创建第二个表的方式有问题吗?非常感谢您的帮助。
提前致谢!!
编辑:我刚刚在运行我的应用程序时检查了 logcat 并收到消息 android.database.sqlite.SQLiteException: no such table: appointments
为什么我的第二个表没有被创建?请帮忙。
答案 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
这样就关闭了与数据库的连接