尝试将数据插入SQLite时出现错误

4

最近我学习了如何使用SQLite在Android中插入数据,但是出现了这个错误,我不知道为什么会出现这个错误,我已经尝试重新阅读我的书籍,但是没有任何解决方案。

我已经重新阅读了我的书籍,并在互联网上找到了问题的解决方法。

SQLiteDatabase db;
public DBAdapter(Context context,String name, SQLiteDatabase.CursorFactory 
factory, int version){
    super(context,DATABASE_NAME,factory,DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db){
    String CREATE_TABLE = "CREATE TABLE" + TABLE_CONTACTS + "(" + nomber +
            "INTEGER PRIMARYKEY," + namapen + "TEXT," + idPen + "INTEGER," 
  + namaGej + "TEXT," + idGej + "TEXT )";
    db.execSQL(CREATE_TABLE);
  }

日志中的错误信息:
Process: com.example.lordbramasta.pakar, PID: 20404
    android.database.sqlite.SQLiteException: near "TABLEtb_penyakit": syntax error (code 1 SQLITE_ERROR): , while compiling: CREATE TABLEtb_penyakit(nomberINTEGER PRIMARYKEY,namapenTEXT,idPenINTEGER,namaGejTEXT,idGejTEXT )
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:901)

我想往sqlite数据库中插入数据。

2
您的查询没有空格。它们不是可选的。表格(TABLE)名称为tablename.... - Elliott Frisch
你缺少了很多空格... - Shawn
除了Elliott的评论之外,我实际上并没有看到你进行任何插入操作。相反,你正在运行CREATE TABLE而没有任何空格。 - Tim Biegeleisen
抱歉,我的意思是当我想尝试插入数据时,出现了这个错误 @TimBiegeleisen - bramasta vikana
我尝试删除并添加更多的空格,但它没有起作用 @Shawn - bramasta vikana
如果你不清楚需要哪些空格,可能需要找一本非常基础的SQL入门指南并仔细学习。 - Shawn
1个回答

3

改变:

public void onCreate(SQLiteDatabase db){
    String CREATE_TABLE = "CREATE TABLE" + TABLE_CONTACTS + "(" + nomber +
            "INTEGER PRIMARYKEY," + namapen + "TEXT," + idPen + "INTEGER," 
  + namaGej + "TEXT," + idGej + "TEXT )";
    db.execSQL(CREATE_TABLE);
  }

public void onCreate(SQLiteDatabase db){
    String CREATE_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "(" + nomber +
            " INTEGER PRIMARY KEY," + namapen + " TEXT," + idPen + " INTEGER," 
  + namaGej + " TEXT," + idGej + " TEXT )";
    db.execSQL(CREATE_TABLE);
  }

接下来,您可以执行以下操作之一:

  • 删除应用程序的数据,或
  • 卸载应用程序

然后重新运行该应用程序。

解释

问题之所以直到您尝试插入时才出现,是因为那将是数据库被打开的第一次尝试。实例化数据库助手不会导致数据库被创建(即没有执行 onCreate 方法,只有在尝试打开数据库(隐式插入)且数据库实际上不存在时才会自动执行 onCreate )。

应删除应用程序的数据(或卸载应用程序,这将删除应用程序的数据),原因是这将删除数据库,从而会运行 onCreate 方法(当数据库存在时不会运行)。

实际的错误是因为CREATE期望在您的情况下创建的类型为CREATE TABLE table_name,而您解析的SQL为CREATE TABLEtb_penyakit,因此您试图告诉它创建一个CREATE TABLEtb_penyakit,而对于SQlite来说,没有这样的东西CREATE TABLEtb_penyakit。如果没有上面添加的其他空格,则表将被创建,但列将为:-

enter image description here

插入操作将会失败,因为你期望存在的列并不存在。

你在 nomber"INTEGER.." 之间漏掉了一个空格。 - Neo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接