java - 数据库不存储数据。我从 Android Studio 日志中得到“SQLiteLog: (1) near "Name": syntax error"
问题描述
在调用 addPatient() 方法并且 addPatient() 方法给出的数据未存储在数据库中之后,我从“SQLiteLog: (1) near "Name": syntax error" 中得到。起初,我怀疑我的“CREATE TABLE”查询可能有问题,但我已经尝试了所有方法,但我无法找出问题所在。
@Override
public void onCreate(SQLiteDatabase db)
{
//===============Create a table for Patient
String query = "CREATE TABLE TABLE_PATIENT (COLUMN_ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
"COLUMN_USERNAME TEXT, " +
"COLUMN_PASSWORD TEXT, " +
"COLUMN_FIRSTNAME TEXT, " +
"COLUMN_LASTNAME TEXT, " +
"COLUMN_AGE TEXT, " +
"COLUMN_GENDER TEXT, " +
"COLUMN_PHONE TEXT, " +
"COLUMN_ADDRESS TEXT);";
db.execSQL(query);
}//End of onCreate()
//Add a new Patient Row to the database
public void addPatient(Patient patient)
{
Log.i(TAG, "addPatient("+patient.getUserName()+")");
ContentValues values = new ContentValues();
values.put(COLUMN_ID, patient.getU_Id());
values.put(COLUMN_USERNAME, patient.getUserName());
values.put(COLUMN_PASSWORD, patient.getPassword());
values.put(COLUMN_FIRSTNAME, patient.getFirstName());
values.put(COLUMN_LASTNAME,patient.getLastName());
values.put(COLUMN_AGE, patient.getAge());
values.put(COLUMN_GENDER,patient.getGender());
values.put(COLUMN_PHONE,patient.getPhoneNumber());
values.put(COLUMN_ADDRESS, patient.getAddress());
SQLiteDatabase db = getWritableDatabase();
try
{
db.insert(TABLE_PATIENT, null, values);
db.close();
}catch (Exception e)
{
Log.i(TAG, e.getMessage());
}
}//End of addPatient()
解决方案
我猜你已经定义了这些变量:
String COLUMN_ID = "id";
String COLUMN_USERNAME = "username";
....................................
或类似的东西。
如果列名中有空格,则必须在它们周围使用方括号或反引号,例如:
String COLUMN_USERNAME = "[user name]";
在您的CREATE TABLE
语句中,您将列名定义为:
"COLUMN_ID", "COLUMN_USERNAME", ....
因为您使用变量名而不是它们的值。
但是在addPatient()
方法中,您ContentValues
通过使用它们的实际名称将值赋给对象。
为了解决您的问题,首先从您正在测试它的设备上卸载该应用程序,以便删除数据库。
然后像这样更改CREATE TABLE
语句:
String query = "CREATE TABLE " + TABLE_PATIENT +" (" +
COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COLUMN_USERNAME + " TEXT, " +
COLUMN_PASSWORD + " TEXT, " +
COLUMN_FIRSTNAME + " TEXT, " +
COLUMN_LASTNAME + " TEXT, " +
COLUMN_AGE + " TEXT, " +
COLUMN_GENDER + " TEXT, " +
COLUMN_PHONE + " TEXT, " +
COLUMN_ADDRESS + " TEXT)";
并重新运行以使用正确的列名重新创建数据库。
推荐阅读
- c++ - 如何使用迭代器设计模式对二叉树进行 BFS 遍历
- c# - 如何在 C# 中处理取决于单击的行和列的 WPF 数据网格单元格上的鼠标单击
- javascript - Paho MQTT Javascript 客户端版本 1.1.0 连接问题
- html - 为什么不“" 通过 jQuery 附加它时成为父元素?
- unit-testing - 使用 javax.ws.rs.client 对 inputStream 进行 Java 编写测试
- vba - 使用 Internet Explorer 发表 YouTube 评论
- google-apps-script - 如何使谷歌电子表格的所有工作表在左上角显示 A1?
- msbuild - 无法使用 msbuild 进行 Web 部署,但可以使用 Visual Studio
- javascript - 无法解析对象数组
- python - 在OpenCV2中找到最接近图像中心的轮廓