Android表创建失败(接近“自动增量”:语法错误)?

时间:2022-10-29 23:04:27
 public static final String MYDATABASE_NAME = "MY_DATABASE";
 public static final String MYDATABASE_TABLE = "MY_TABLE";
 public static final String MYDATABASE_TABLE2 = "MY_TABLE2";
 public static final int MYDATABASE_VERSION = 1;
 public static final String KEY_ID = "_id";
 public static final String KEY_ID2 = "_id2";
 public static final String KEY_CONTENT1 = "Content1";
 public static final String KEY_CONTENT2 = "Content2";
 public static final String KEY_CONTENT3 = "Content3";

 //create table MY_DATABASE (ID integer primary key, Content text not null);
 private static final String SCRIPT_CREATE_DATABASE = "create table " + MYDATABASE_TABLE + " (" 
                                                        +KEY_ID + " integer primary key autoincrement, " 
                                                        + KEY_CONTENT1 + " text not null);";

 private static final String SCRIPT_CREATE_DATABASE2 = "create table " + MYDATABASE_TABLE2 + " (" 
                                                        + KEY_ID2 + " integer autoincrement, " 
                                                        + KEY_CONTENT2 + " text not null, " 
                                                        + KEY_CONTENT3 + " text not null, "
                                                        + " FOREIGN KEY ("+KEY_ID2+") REFERENCES "+MYDATABASE_TABLE+" ("+KEY_ID+"));";

I can not find out what gives the following error, please help me out thank you.

我不知道是什么原因导致了以下的错误,请帮助我一下谢谢。

09-29 13:41:19.760: ERROR/Database(334): Failure 1 (near "autoincrement": syntax error) on 0x218df0 when preparing 'create table MY_TABLE2 (_id2 integer autoincrement, Content2 text not null, Content3 text not null, FOREIGN KEY (_id2) REFERENCES MY_TABLE (_id));'.

错误/数据库(334):在准备“创建表MY_TABLE2 (_id2整数自动递增,Content2文本不为空,Content3文本不为空,外键(_id2)引用MY_TABLE (_id))”时,0x218df0上的失败1(接近“自动递增”:语法错误);

09-29 13:41:19.770: DEBUG/AndroidRuntime(334): Shutting down VM

调试/ android系统(334):关闭VM

09-29 13:41:19.770: WARN/dalvikvm(334): threadid=1: thread exiting with uncaught exception (group=0x4001d800)

警告/dalvikvm(334): threadid=1:带未捕获异常的线程退出(组=0x4001d800)

09-29 13:41:19.791: ERROR/AndroidRuntime(334): FATAL EXCEPTION: main

错误/安卓时间(334):致命异常:主要

09-29 13:41:19.791: ERROR/AndroidRuntime(334): java.lang.RuntimeException: Unable to start activity ComponentInfo{sep.com/sep.com.SepActivity}: android.database.sqlite.SQLiteException: near "autoincrement": syntax error: create table MY_TABLE2 (_id2 integer autoincrement, Content2 text not null, Content3 text not null, FOREIGN KEY (_id2) REFERENCES MY_TABLE (_id));

09-29 13:41:19.791:错误/ AndroidRuntime(334):. lang。RuntimeException:无法启动活动ComponentInfo {sep.com/sep.com.SepActivity }:android.database.sqlite。SQLiteException:临近“自动递增”:语法错误:创建表MY_TABLE2 (_id2整数自动递增,Content2文本不为空,Content3文本不为空,外键(_id2)引用MY_TABLE (_id);

5 个解决方案

#1


34  

In short: In SQLite a column declared INTEGER PRIMARY KEY will autoincrement. There is no autoincrement keyword in SQLite, that is why you are getting an error.

简而言之:在SQLite中,声明为整数的列主键将自动递增。在SQLite中没有自动递增的关键字,这就是为什么会出现错误的原因。

You can find out more on SQLite FAQ.

你可以在SQLite FAQ中找到更多信息。

EDIT: just writing integer primary key it is enough. SQLite will automatically increment your ids.

编辑:只写整型主键就够了。SQLite将自动增加您的id。

EDIT2: Your onUpgrade() method should look like this :

EDIT2:你的onUpgrade()方法应该是这样的:

  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        if (newVersion > oldVersion) {
            Log.w("MyAppTag","Updating database from version " + oldVersion + " to "
                    + newVersion + " .Existing data will be lost.");
            db.execSQL("DROP TABLE IF EXISTS " + MY_TABLE);
            db.execSQL("DROP TABLE IF EXISTS " + MY_TABLE2);
            onCreate(db);
        }

#2


8  

This:

这样的:

+ KEY_ID2 + " integer autoincrement, " 

should be this:

应该是这样的:

+ KEY_ID2 + " integer primary key autoincrement, " 

If you follow the syntax diagrams for CREATE TABLE you'll see that autoincrement should only come after primary key.

如果您遵循CREATE TABLE的语法图,您将看到自动递增应该只出现在主键之后。

Android表创建失败(接近“自动增量”:语法错误)?Android表创建失败(接近“自动增量”:语法错误)?

If you want _id2 to be a foreign key then you don't want it to be auto increment at all though.

如果你想让_id2是外键,那么你就不希望它是自动递增的。

#3


3  

An above answer says that 'There is no autoincrement keyword in SQLite.' This is incorrect. There is a keyword called 'autoincrement' and I used it in the primary key.

上面的回答是“SQLite中没有自动递增的关键字”。这是不正确的。有一个关键词叫做“自动递增”,我在主键中使用了它。

For example:

例如:

   static final String CREATE_LOCATION_TABLE="CREATE TABLE Location"+
            "( LocationID INTEGER PRIMARY KEY AUTOINCREMENT," +
            " RestuarantID int not null," +
            " Latitude float not null," +
            " Longitude float not null)";

Also make sure when you enter data to this table use the keyword 'null' in the place of the primary key.

还要确保在向该表输入数据时使用关键字'null'代替主键。

Like this:

是这样的:

   static final String INSERT_LOCATION= "Insert into Location values" +
            "(null,1002,6.905369,79.851514)";

#4


1  

Three things:

三件事:

  • Remove the trailing ; from the statements.
  • 消除拖尾;从语句。
  • Add "primary key" constraint to the autoincrement column
  • 向自动递增列添加“主键”约束
  • Remove autoincrement from PK columns - it will happen automatically.
  • 从PK列中删除自动增量——它将自动发生。

#5


0  

sqlite> CREATE TABLE app (a INTEGER PRIMARY KEY NOT NULL, B VARCHAR);
sqlite> insert into app (b) values ('');
sqlite> insert into app (b) values ('a');
sqlite> 
sqlite> insert into app (b) values ('b');
sqlite> insert into app (b) values ('c');
sqlite> insert into app (b) values ('d');
sqlite> select * from app;
1|
2|a
3|b
4|c
5|d
sqlite> exit;

NOTE: IN SQLite there in no AUTOINCREMENT keyword. So, you have to just use INTEGER PRIMARY KEY NOT NULL. It will automatically insert the incremented value for the attribute.

注意:在SQLite中没有自动递增关键字。你只需要使用整数主键NOT NULL。它将自动插入属性的递增值。

#1


34  

In short: In SQLite a column declared INTEGER PRIMARY KEY will autoincrement. There is no autoincrement keyword in SQLite, that is why you are getting an error.

简而言之:在SQLite中,声明为整数的列主键将自动递增。在SQLite中没有自动递增的关键字,这就是为什么会出现错误的原因。

You can find out more on SQLite FAQ.

你可以在SQLite FAQ中找到更多信息。

EDIT: just writing integer primary key it is enough. SQLite will automatically increment your ids.

编辑:只写整型主键就够了。SQLite将自动增加您的id。

EDIT2: Your onUpgrade() method should look like this :

EDIT2:你的onUpgrade()方法应该是这样的:

  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        if (newVersion > oldVersion) {
            Log.w("MyAppTag","Updating database from version " + oldVersion + " to "
                    + newVersion + " .Existing data will be lost.");
            db.execSQL("DROP TABLE IF EXISTS " + MY_TABLE);
            db.execSQL("DROP TABLE IF EXISTS " + MY_TABLE2);
            onCreate(db);
        }

#2


8  

This:

这样的:

+ KEY_ID2 + " integer autoincrement, " 

should be this:

应该是这样的:

+ KEY_ID2 + " integer primary key autoincrement, " 

If you follow the syntax diagrams for CREATE TABLE you'll see that autoincrement should only come after primary key.

如果您遵循CREATE TABLE的语法图,您将看到自动递增应该只出现在主键之后。

Android表创建失败(接近“自动增量”:语法错误)?Android表创建失败(接近“自动增量”:语法错误)?

If you want _id2 to be a foreign key then you don't want it to be auto increment at all though.

如果你想让_id2是外键,那么你就不希望它是自动递增的。

#3


3  

An above answer says that 'There is no autoincrement keyword in SQLite.' This is incorrect. There is a keyword called 'autoincrement' and I used it in the primary key.

上面的回答是“SQLite中没有自动递增的关键字”。这是不正确的。有一个关键词叫做“自动递增”,我在主键中使用了它。

For example:

例如:

   static final String CREATE_LOCATION_TABLE="CREATE TABLE Location"+
            "( LocationID INTEGER PRIMARY KEY AUTOINCREMENT," +
            " RestuarantID int not null," +
            " Latitude float not null," +
            " Longitude float not null)";

Also make sure when you enter data to this table use the keyword 'null' in the place of the primary key.

还要确保在向该表输入数据时使用关键字'null'代替主键。

Like this:

是这样的:

   static final String INSERT_LOCATION= "Insert into Location values" +
            "(null,1002,6.905369,79.851514)";

#4


1  

Three things:

三件事:

  • Remove the trailing ; from the statements.
  • 消除拖尾;从语句。
  • Add "primary key" constraint to the autoincrement column
  • 向自动递增列添加“主键”约束
  • Remove autoincrement from PK columns - it will happen automatically.
  • 从PK列中删除自动增量——它将自动发生。

#5


0  

sqlite> CREATE TABLE app (a INTEGER PRIMARY KEY NOT NULL, B VARCHAR);
sqlite> insert into app (b) values ('');
sqlite> insert into app (b) values ('a');
sqlite> 
sqlite> insert into app (b) values ('b');
sqlite> insert into app (b) values ('c');
sqlite> insert into app (b) values ('d');
sqlite> select * from app;
1|
2|a
3|b
4|c
5|d
sqlite> exit;

NOTE: IN SQLite there in no AUTOINCREMENT keyword. So, you have to just use INTEGER PRIMARY KEY NOT NULL. It will automatically insert the incremented value for the attribute.

注意:在SQLite中没有自动递增关键字。你只需要使用整数主键NOT NULL。它将自动插入属性的递增值。