简体   繁体   English

错误:引起:android.database.sqlite.SQLiteException:near“add”:语法错误(代码1):

[英]Error: Caused by: android.database.sqlite.SQLiteException: near “add”: syntax error (code 1):

I have a table in SQLite database. 我在SQLite数据库中有一个表。 In Android Studio I have this error: 在Android Studio中我有这个错误:

Caused by: android.database.sqlite.SQLiteException: near "add": syntax 
           error (code 1): , while compiling: SELECT id, onvan, matn, 
             nevisande, tasvir, fav, khande, ezafi, address, pdfname, 
            downloaded, add, buy FROM dastanha

Here is my DataBaseAdapter : 这是我的DataBaseAdapter:

public class DBAdapter {

public static final String KEY_ID = "id";
public static final String KEY_ONVAN = "onvan";
public static final String KEY_MATN = "matn";
public static final String KEY_NEVIS = "nevisande";
public static final String KEY_IMG = "tasvir";
public static final String KEY_FAV = "fav";
public static final String KEY_KHAND = "khande";
public static final String KEY_EXTRA = "ezafi";
public static final String KEY_ADDRESS = "address";
public static final String KEY_PDFNAME = "pdfname";
public static final String KEY_DOWNLOADED = "downloaded";
public static final String KEY_ADD = "add";
public static final String KEY_BUY = "buy";
public static final String DATABASE_NAME = "dastanha";
public static final String DATABASE_TABLE = "dastanha";
public static final String TAG = "book";


static final String CREATE_TABLE = "CREATE TABLE "+DATABASE_TABLE+" ("+KEY_ID+" INTEGER PRIMARY KEY  NOT NULL ,"
        +KEY_ONVAN+" TEXT,"+KEY_MATN+" TEXT,"+KEY_NEVIS+" TEXT,"
        + KEY_IMG+" TEXT,"+KEY_FAV+" INTEGER NOT NULL  DEFAULT (0) ,"
        +KEY_KHAND+" INTEGER NOT NULL  DEFAULT (0) ,"+KEY_EXTRA+" TEXT,"
        +KEY_ADDRESS+" TEXT,"+KEY_PDFNAME+" TEXT DEFAULT (null) , "
        +KEY_DOWNLOADED+" INTEGER NOT NULL  DEFAULT 0, "
        +KEY_ADD+" INTEGER NOT NULL  DEFAULT 0, "
        +KEY_BUY+" INTEGER NOT NULL  DEFAULT 0)";

String[] yek_name = new String[] { KEY_ID, KEY_ONVAN, KEY_MATN, KEY_NEVIS,
        KEY_IMG, KEY_FAV, KEY_KHAND, KEY_EXTRA, KEY_ADDRESS, KEY_PDFNAME, KEY_DOWNLOADED, KEY_ADD, KEY_BUY };

final Context context;

DatabaseHelper DBHelper;
SQLiteDatabase db;

public DBAdapter(Context ctx) {
    this.context = ctx;
    DBHelper = new DatabaseHelper(context);
}

private static class DatabaseHelper extends SQLiteOpenHelper {
    DatabaseHelper(Context context) {
        // DATABASE_VERSION = 8
        super(context, DATABASE_NAME, null, 8);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        try {
            db.execSQL(CREATE_TABLE);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                + newVersion + ", which will destroy all old data");

        db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
        onCreate(db);
    }
}
public DBAdapter open() throws SQLException {
    db = DBHelper.getWritableDatabase();
    return this;
}
public void close() {
    DBHelper.close();
}
public List<Dastan> getAllContacts() {

    Cursor cursor = db.query(DATABASE_TABLE, yek_name, null, null, null,
            null, null);
    List<Dastan> nams = cursorToList(cursor);
    return nams;
}
private List<Dastan> cursorToList(Cursor cursor) {
    List<Dastan> nams = new ArrayList<Dastan>();
    if (cursor.getCount() > 0) {
        while (cursor.moveToNext()) {
            Dastan nam = new Dastan();
            nam.setId(cursor.getInt(cursor.getColumnIndex(KEY_ID)));
            nam.setOnvan(cursor.getString(cursor.getColumnIndex(KEY_ONVAN)));
            nam.setMatn(cursor.getString(cursor.getColumnIndex(KEY_MATN)));
            nam.setNevisande(cursor.getString(cursor.getColumnIndex(KEY_NEVIS)));
            nam.setTasvir(cursor.getString(cursor.getColumnIndex(KEY_IMG)));
            nam.setFav(cursor.getInt(cursor.getColumnIndex(KEY_FAV)));
            nam.setKhande(cursor.getInt(cursor.getColumnIndex(KEY_KHAND)));
            nam.SetEzafi(cursor.getString(cursor.getColumnIndex(KEY_EXTRA)));
            nam.SetAddress(cursor.getString(cursor.getColumnIndex(KEY_ADDRESS)));
            nam.SetPdfname(cursor.getString(cursor.getColumnIndex(KEY_PDFNAME)));
            nam.setDownloaded(cursor.getInt(cursor.getColumnIndex(KEY_DOWNLOADED)));
            nam.setAdd(cursor.getInt(cursor.getColumnIndex(KEY_ADD)));
            nam.setBuy(cursor.getInt(cursor.getColumnIndex(KEY_BUY)));

            nams.add(nam);
        };
    return nams;
}
public Dastan getContact(int new_id) throws SQLException {

    List<Dastan> nams = new ArrayList<Dastan>();

    Cursor cursor = db.query(true, DATABASE_TABLE, yek_name, KEY_ID
            + " == '" + new_id + "'", null, null, null, null, null);
    Dastan nam = new Dastan();
    if (cursor != null) {
        cursor.moveToFirst();
        nams = cursorToList(cursor);
    }
    return nams.get(0);
}

// /search
public List<Dastan> findContacts(String nam, String row)
        throws SQLException {
    Cursor cursor = db.query(true, DATABASE_TABLE, yek_name, row
            + " LIKE '%" + nam + "%'", null, null, null, null, null);
    List<Dastan> nams = cursorToList(cursor);
    return nams;
}

// /fav?
public List<Dastan> findFAVContacts() throws SQLException {
    Cursor cursor = db.query(true, DATABASE_TABLE, yek_name, KEY_FAV
            + " == " + 1 + "", null, null, null, null, null);

    List<Dastan> nams = cursorToList(cursor);
    return nams;
}
public List<Dastan> findKhandeContacts() throws SQLException {
    Cursor cursor = db.query(true, DATABASE_TABLE, yek_name, KEY_KHAND
            + " == " + 1 + "", null, null, null, null, null);

    List<Dastan> nams = cursorToList(cursor);
    return nams;
}

// ---updates a contact---
public boolean updateContact(Dastan up_nam) {
    ContentValues args = new ContentValues();
    args.put(KEY_ID, up_nam.getId());
    args.put(KEY_ONVAN, up_nam.getOnvan());
    args.put(KEY_MATN, up_nam.getMatn());
    args.put(KEY_NEVIS, up_nam.getNevisande());
    args.put(KEY_IMG, up_nam.getTasvir());
    args.put(KEY_FAV, up_nam.getFav());
    args.put(KEY_KHAND, up_nam.getKhande());
    args.put(KEY_EXTRA, up_nam.getEzafi());
    args.put(KEY_ADDRESS, up_nam.getAddress());
    args.put(KEY_PDFNAME, up_nam.getPdfname());
    args.put(KEY_DOWNLOADED, up_nam.getDownloaded());
    args.put(KEY_ADD, up_nam.getAdd());
    args.put(KEY_BUY, up_nam.getBuy());

    return db.update(DATABASE_TABLE, args, KEY_ID + "=" + up_nam.getId(),
            null) > 0;
}
    }

And: 和:

public class Dastan implements Parcelable{

private int id;
private String onvan;
private String matn;
private String nevisande;
private String tasvir;
private int fav;
private int khande;
private String ezafi;
private String address;
private String pdfname;
private int downloaded;
private int add;
private int buy;


public Dastan (){

}

public int getId(){
    return id;
}
public void setId(int id){
    this.id = id;
}
public String getOnvan(){
    return onvan;
}
public void setOnvan(String onvan){
    this.onvan = onvan;
}
public String getMatn (){
    return matn;
}
public void setMatn(String matn){
    this.matn = matn;
}
public String getNevisande(){
    return nevisande;
}
public void setNevisande(String nevisande){
    this.nevisande = nevisande;
}
public String getTasvir(){
    return tasvir;
}
public void setTasvir(String tasvir){
    this.tasvir = tasvir;
}
public int getFav(){
    return fav;
}
public void setFav(int fav){
    this.fav = fav;
}
public int getKhande(){
    return khande;
}
public void setKhande(int khande){
    this.khande = khande;
}
public String getEzafi(){
    return ezafi;
}
public void SetEzafi(String ezafi){
    this.ezafi = ezafi;
}
public String getAddress(){
    return address;
}
public void SetAddress(String address){
    this.address = address;
}
public String getPdfname(){
    return pdfname;
}
public void SetPdfname(String pdfname){
    this.pdfname = pdfname;
}
public int getDownloaded(){
    return downloaded;
}
public void setDownloaded(int downloaded){this.downloaded = downloaded;}
public int getAdd(){return add;}
public void setAdd(int add){this.add = add;}
public int getBuy(){return buy;}
public void setBuy(int buy){this.buy = buy;}


public Dastan (Parcel in){
    id = in.readInt();
    onvan = in.readString();
    matn = in.readString();
    nevisande = in.readString();
    tasvir = in.readString();
    fav = in.readInt();
    khande = in.readInt();
    ezafi=in.readString();
    address=in.readString();
    pdfname=in.readString();
    downloaded = in.readInt();
    add = in.readInt();
    buy = in.readInt();

}
@Override
public int describeContents() {
    // TODO Auto-generated method stub
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int arg1) {
    // TODO Auto-generated method stub
    dest.writeInt(id);
    dest.writeString(onvan);
    dest.writeString(matn);
    dest.writeString(nevisande);
    dest.writeString(tasvir);
    dest.writeInt(fav);
    dest.writeInt(khande);
    dest.writeString(ezafi);
    dest.writeString(address);
    dest.writeString(pdfname);
    dest.writeInt(downloaded);
    dest.writeInt(add);
    dest.writeInt(buy);

}
public static final Parcelable.Creator<Dastan> CREATOR = new Parcelable.Creator<Dastan>() {

    @Override
    public Dastan createFromParcel(Parcel arg0) {
        // TODO Auto-generated method stub
        return new Dastan(arg0);
    }

    @Override
    public Dastan[] newArray(int arg0) {
        // TODO Auto-generated method stub
        return new Dastan[arg0];
    }
};

    }

And Logcat: 和Logcat:

    08-16 14:10:24.038 14377-14377/com.example.ava.book3 E/SQLiteLog: (1) near "add": syntax error
    08-16 14:10:24.039 14377-14377/com.example.ava.book3 D/AndroidRuntime: Shutting down VM
    08-16 14:10:24.039 14377-14377/com.example.ava.book3 E/AndroidRuntime: FATAL EXCEPTION: main
                                                                   Process: 
    com.example.ava.book3, PID: 14377
                                                                   java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.ava.book3/com.example.ava.book3.MainActivity}: android.database.sqlite.SQLiteException: near "add": syntax error (code 1): , while compiling: SELECT id, onvan, matn, nevisande, tasvir, fav, khande, ezafi, address, pdfname, downloaded, add, buy FROM dastanha
                                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
                                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
                                                                       at android.app.ActivityThread.-wrap11(ActivityThread.java)
                                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
                                                                       at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                       at android.os.Looper.loop(Looper.java:148)
                                                                       at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                                                                    Caused by: android.database.sqlite.SQLiteException: near "add": syntax error (code 1): , while compiling: SELECT id, onvan, matn, nevisande, tasvir, fav, khande, ezafi, address, pdfname, downloaded, add, buy FROM dastanha
                                                                       at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
                                                                       at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887)
                                                                       at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:498)
                                                                       at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
                                                                       at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
                                                                       at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
                                                                       at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
                                                                       at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1316)
                                                                       at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1163)
                                                                       at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1034)
                                                                       at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1202)
                                                                       at com.example.ava.book3.DBAdapter.getAllContacts(DBAdapter.java:126)
                                                                       at com.example.ava.book3.MainActivity.onCreate(MainActivity.java:118)
                                                                       at android.app.Activity.performCreate(Activity.java:6237)
                                                                       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
                                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
                                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                                                                       at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                                                                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                       at android.os.Looper.loop(Looper.java:148) 
                                                                       at android.app.ActivityThread.main(ActivityThread.java:5417) 
                                                                       at java.lang.reflect.Method.invoke(Native Method) 
                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
        08-16 14:10:24.063 1727-2422/system_process W/ActivityManager:         Force finishing activity com.example.ava.book3/.MainActivity

I do not know what is wrong. 我不知道出了什么问题。 please help me. 请帮我。 thank in advance. 预先感谢。

ADD is a reserved keyword in SQLite, used to add columns to an existing table . ADD是SQLite中的保留关键字 ,用于向现有表添加列

The SQL standard specifies a huge number of keywords which may not be used as the names of tables, indices, columns, databases, user-defined functions, collations, virtual table modules, or any other named object. SQL标准指定了大量关键字,这些关键字不能用作表,索引,列,数据库,用户定义函数,排序规则,虚拟表模块或任何其他命名对象的名称。

As a result, you should either use another name for your column, or if you absolutely have to, you can use one of the following methods, as defined on the keywords documentation page : 因此,您应该为列使用其他名称,或者如果您必须使用,则可以使用以下方法之一,如关键字文档页面中所定义:

If you want to use a keyword as a name, you need to quote it. 如果要将关键字用作名称,则需要引用它。 There are four ways of quoting keywords in SQLite: 在SQLite中有四种引用关键字的方法:

  • 'keyword' A keyword in single quotes is a string literal. 'keyword'单引号中的关键字是字符串文字。
  • "keyword" A keyword in double-quotes is an identifier. “keyword”双引号中的关键字是标识符。
  • [keyword] A keyword enclosed in square brackets is an identifier. [keyword]方括号中的关键字是标识符。

This is not standard SQL. 这不是标准的SQL。 This quoting mechanism is used by MS Access and SQL Server and is included in SQLite for compatibility. 此引用机制由MS Access和SQL Server使用,并包含在SQLite中以实现兼容性。

You cannot use add or ADD as a key because it is a reserved keyword in SQLite (watch them all here ). 您不能使用addADD作为键,因为它是SQLite中的保留关键字( 在此处观看它们)。

You should use an alternative, maybe added (bad, very similar to add ) or plus or anything. 您应该使用替代方案,可能added (不良,非常类似于add )或plus或任何东西。

Try replacing the add in public static final String KEY_ADD = "add"; 尝试更换addpublic static final String KEY_ADD = "add"; by a different non-reserved String . 通过不同的非保留String

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 原因:android.database.sqlite.SQLiteException:附近“”:语法错误(代码1): - Caused by: android.database.sqlite.SQLiteException: near “”: syntax error (code 1): 引起:android.database.sqlite.SQLiteException:near“”:语法错误(代码1):,同时编译: - Caused by: android.database.sqlite.SQLiteException: near “”: syntax error (code 1): , while compiling: android.database.sqlite.SQLiteException:靠近“。”:语法错误(代码1): - android.database.sqlite.SQLiteException: near “.”: syntax error (code 1): , 造成原因:android.database.sqlite.SQLiteException:“文本”附近:语法错误(代码1): - Caused by: android.database.sqlite.SQLiteException: near “text”: syntax error (code 1): android.database.sqlite.SQLiteException:“;”附近:语法错误(代码1) - android.database.sqlite.SQLiteException: near “;”: syntax error (code 1) android.database.sqlite.SQLiteException:靠近“UNION”:语法错误 - android.database.sqlite.SQLiteException: near "UNION": syntax error Android Studio 创建数据库错误(android.database.sqlite.SQLiteException: near &quot;and&quot;: syntax error (code 1): )详解 - Android Studio Create Database error (android.database.sqlite.SQLiteException: near "and": syntax error (code 1): ) Detailed Analysis android.database.sqlite.SQLiteException:“WHERE”附近:语法错误(Sqlite 代码 1) - android.database.sqlite.SQLiteException: near “WHERE”: syntax error (Sqlite code 1) android.database.sqlite.SQLiteException:靠近“ 1”:语法错误(代码1): - android.database.sqlite.SQLiteException: near “1”: syntax error (code 1): , while compiling 任何人都可以帮助我:android.database.sqlite.SQLiteException:靠近“,”:语法错误(代码1):, - May any one please help me: android.database.sqlite.SQLiteException: near ",": syntax error (code 1): ,
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM