2013-03-08 94 views
3

我仍然在学习Android开发,并且我在创建sqlite数据库表时遇到了问题。这里是我的代码的一部分:Sqlite异常,语法错误

`

private static final String CREATE_ADS_PICTURE = "CREATE TABLE " 
     + AdsBDD.TABLE_ADS_PICTURE + "(" + AdsBDD.ID_PICS 
     + " INTEGER PRIMARY KEY AUTOINCREMENT ," + AdsBDD.AD_ID 
     + " INTEGER NOT NULL," + AdsBDD.PICTURE + " TEXT," + AdsBDD.FOLDER 
     + " TEXT," + AdsBDD.ORDER_NO + " INTEGER NOT NULL);"; 

private static final String CREATE_AGENCES = "CREATE TABLE " 
     + AgencesBDD.TABLE_AGENCES + "(" + AgencesBDD.ID 
     + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," + AgencesBDD.GROUP 
     + " INTEGER," + AgencesBDD.USERNAME + " TEXT," + AgencesBDD.EMAIL 
     + " TEXT," + AgencesBDD.CONTACT_NAME + " TEXT," 
     + AgencesBDD.REGISTRATION_DATE + " TEXT," + AgencesBDD.ACTIVATION 
     + " TEXT," + AgencesBDD.ACTIVE + " INTEGER," + AgencesBDD.STORE 
     + " INTEGER," + AgencesBDD.STORE_BANNER + " TEXT," 
     + AgencesBDD.RATING + " REAL," + AgencesBDD.LANGUAGE + " TEXT," 
     + AgencesBDD.IDENTITY + " TEXT," + AgencesBDD.ADDRESS + " TEXT," 
     + AgencesBDD.PHONE + " TEXT," + AgencesBDD.COMPANY + " TEXT," 
     + AgencesBDD.WEBPAGE + " TEXT," + AgencesBDD.CODE_POSTAL + " TEXT," 
     + AgencesBDD.JE_SUIS_UN + " TEXT," + AgencesBDD.VILLE + " TEXT," 
     + AgencesBDD.VIDEO + " TEXT);"; 

    @Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL(CREATE_ADS_PICTURE); 
    db.execSQL(CREATE_AGENCES); 
} 



    public class AgencesBDD { 
public static final String TABLE_AGENCES = "agences"; 

public static final String ID = "id"; 
public static final String GROUP = "group"; 
public static final String USERNAME = "username"; 
public static final String EMAIL = "email"; 
public static final String CONTACT_NAME = "contact_name"; 
public static final String REGISTRATION_DATE = "registration_date"; 
public static final String ACTIVATION = "activation"; 
public static final String ACTIVE = "active"; 
public static final String STORE = "store"; 
public static final String STORE_BANNER = "store_banner"; 
public static final String RATING = "rating"; 
public static final String LANGUAGE = "language"; 
public static final String IDENTITY = "identity"; 
public static final String ADDRESS = "address"; 
public static final String PHONE = "phone"; 
public static final String COMPANY = "company"; 
public static final String WEBPAGE = "webpage"; 
public static final String CODE_POSTAL = "code_postal"; 
public static final String JE_SUIS_UN = "je_suis_un"; 
public static final String VILLE = "ville"; 
public static final String VIDEO = "video"; 

` 所以问题是,SQLite的抛出该异常为表AGENCES,但表AD_PICTURE正常工作:

03-08 14:36:01.892: E/AndroidRuntime(10822): FATAL EXCEPTION: main 
03-08 14:36:01.892: E/AndroidRuntime(10822): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.infonetdiffusion.immohabitation/com.infonetdiffusion.immohabitation.FragmentBaseActivity}: android.database.sqlite.SQLiteException: near "group": syntax error (code 1): , while compiling: CREATE TABLE agences(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,group INTEGER,username TEXT,email TEXT,contact_name TEXT,registration_date TEXT,activation TEXT,active INTEGER,store INTEGER,store_banner TEXT,rating REAL,language TEXT,identity TEXT,address TEXT,phone TEXT,company TEXT,webpage TEXT,code_postal TEXT,je_suis_un TEXT,ville TEXT,video TEXT); 

它应该很容易解决,但我无法找到我错在哪里... 任何帮助将被apreciated!

+1

或许,这将是一个很大如果你只是打印出你创建的字符串并发布这些字符串,那么就更容易。此外,作为一个快速猜测,我会说'组'只是一个保留的命令,现在期待一个GROUP BY命令。尝试将组更改为随机项,如'test' – 2013-03-08 13:51:15

+0

刚编辑它。 – Ncm112 2013-03-08 13:56:47

回答

6

您使用的源码关键字作为列名即groupsqliteKeyword这是限制

+0

就是这样!我不知道这是一个限制词...非常感谢! – Ncm112 2013-03-08 14:03:35

0

这两种情况都是不等价的!请注意,第一种情况下的主键不具有NOT NULL

0

CREATE TABLE AGENCES(ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, INTEGER,用户名文本,电子邮件文本,CONTACT_NAME TEXT,REGISTRATION_DATE TEXT,激活TEXT,积极INTEGER,存储INTEGER,store_banner TEXT,评级REAL,语言文本,身份文本,地址文本,电话文本,公司文本,网页文本,code_postal文本,je_suis_un文本,ville文本,视频文本);

是SQL中的关键字,你不能用它作为列名,改到其他字符串不能是关键字SQL