当前位置: 首页 > 知识库问答 >
问题:

Android中SQLite查询的语法错误

张华池
2023-03-14

我试图在Android中创建一个新的SQLite数据库。这是我的onCreate方法:

public static final String DATABASE_NAME = "eventList.db";
public static final String TABLE_NAME = "event_table";
public static final String COL1 = "ID";
public static final String COL2 = "EVENTNAME";
public static final String COL3 = "UNIXTIMESTAMP";
public static final String COL4 = "PARTICIPANTS";
public static final String COL5 = "LOCATION";
public static final String COL6 = "LOCATIONNAME";
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
    String createTable = "CREATE TABLE " + TABLE_NAME + "(ID INTEGER PRIMARY KEY AUTOINCRIMENT, "
            + " EVENTNAME TEXT, UNIXTIMESTAMP INTEGER, PARTICIPANTS TEXT, LOCATION TEXT, LOCATIONNAME TEXT)";
    sqLiteDatabase.execSQL(createTable);
}

这会引发语法错误:

android.database.sqlite.SQLiteExcture:在"AUTOINCRIMENT"附近:语法错误(代码1):,编译时:创建表event_table(ID INTEGER PRIMARYKEY AUTOINCRIMENT, EVENTNAME TEXT, UniXTIMESTAMP INTEGER,参与者文本,位置文本,位置名称文本)

请注意,参与者将是一个自定义对象,位置将是一个LatLng对象

如何解决错误?

共有3个答案

司空镜
2023-03-14

试试这个

public static final String DATABASE_NAME = "eventList.db";
public static final String TABLE_NAME = "event_table";
public static final String COL1 = "ID";
public static final String COL2 = "EVENTNAME";
public static final String COL3 = "UNIXTIMESTAMP";
public static final String COL4 = "PARTICIPANTS";
public static final String COL5 = "LOCATION";
public static final String COL6 = "LOCATIONNAME";
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
    String createTable = "CREATE TABLE " + TABLE_NAME + "(ID INTEGER PRIMARY KEY AUTOINCREMENT, "
            + " EVENTNAME TEXT, UNIXTIMESTAMP INTEGER, PARTICIPANTS TEXT, LOCATION TEXT, LOCATIONNAME TEXT)";
    sqLiteDatabase.execSQL(createTable);
}

我认为您的拼写错误将AUTOINCRIMENT替换为AUTOINCREment。

丌官瀚
2023-03-14

你有一个打字错误

 String createTable = "CREATE TABLE " + TABLE_NAME + "(ID INTEGER PRIMARY KEY AUTOINCRIMENT, "

注意AUTOINCRIMENT应该拼写为AUTOINCREENT

plus-ID也应该是_-ID,因为你已经麻烦地设置了常量,为什么不使用它们来保存进一步的潜在错误呢?e、 g.代替

+ " EVENTNAME TEXT

为什么不使用

+ COL2 + " TEXT

我建议你在这里阅读如何创建数据库这是一个极好的教程,展示了最佳实践

萧树
2023-03-14

ID INTEGER PRIMARY KEY AUTOINCRIMENT不正确,应该是ID INTEGER PRIMARY KEY AUTOINCRIMENT

然而,按照SQLite AUTOINCREMENT,编码AUTOINCREMENT可能最好根本不编码。ID仍然是唯一标识符。

您还可能发现使用_id而不是id作为列名是有利的。有时需要_id,例如对于游标或适配器

所以我建议使用_idINTEGER PRIMARYKEY

 类似资料:
  • 问题内容: 我从a取值并将其设置为内部条件 如 但这是行不通的。有什么建议? 问题答案: 尝试修剪字符串以确保没有多余的空格: 也可以使用@thinksteep之类的方法。

  • 我在寻找一个特定点周围的距离。 我在我的数据库中有这些项目,带有lat和long。 我想得到指定半径范围内的所有结果。 我就是这样得到的: 现在它给了我一个错误: SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解第4行(SQL:select*,(6371*acos(cos(radians(51,3))*cos(radia

  • 请查看与您的MySQL server版本相对应的手册,以便在

  • 我正在尝试使用SQLite数据库在android中本地存储电子邮件。当我第一次调用,该数据库尚不存在,已创建。我在create语句中遇到语法错误。。。我的代码看起来像这样。。。 我不熟悉SQLite语法,我一直在寻找导致这种情况的原因,但没有任何结果。知道是什么引起的吗?数据库确实是本地存储此类数据的最佳方式。 准确的错误如下所示。。

  • 问题内容: 假设我有这种查询 然后像这样使用 因此,它从许多表中选择值,执行一些操作等。如您所见,查询非常复杂(非常难调试),并且性能似乎不如我预期的好。我的问题是: 我可以使用某种准备好的语句来提高性能吗? 执行更简单的查询并使用一些自定义代码手动处理它们会更快吗? 问题答案: 如果您是我,则将您的sqlite数据库复制到主机,然后尝试在某些SQLite GUI中手动执行它,同时用您拥有的实际变

  • 我正在使用SQLiteHelper创建一个数据库,当应用程序尝试运行时,我不断收到异常。 这是我收到的错误消息:引起原因:android.database.sqlite.SQLiteExcture:附近"Trip":语法错误(代码1):,而编译:创建表商务旅行支出(desc文本主键,餐整数不为空,饮料整数不为空,旅行整数不为空,住宿整数不为空,其他整数不为空,Receipt_Retained?Re