【问题标题】:E/SQLiteLog: (1) near "All": syntax errorE/SQLiteLog: (1) “All”附近:语法错误
【发布时间】:2019-05-18 09:04:36
【问题描述】:

我是应用程序开发的新手,正在尝试构建一个搜索名为“All”的数据库表的应用程序,但不断收到此错误:

E/SQLiteLog: (1) "All" 附近:语法错误

错误代码:1 (SQLITE_ERROR) 原因:SQL(查询)错误或缺少数据库。 (“All”附近:语法错误(代码 1):,编译时:SELECT Phrase FROM All)

我认为这一定是我的数据库设置有问题,但找不到问题。

这是我的代码:

public class Database extends SQLiteAssetHelper {
    private static final String DB_NAME="DoYouGetMeDoc.db";
    private static final int DB_VER=1;
    public Database(Context context) {
        super(context, DB_NAME, null, DB_VER);
    }

    public List<Items> getall(){
        SQLiteDatabase db = getReadableDatabase();
        SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
        String[] sqliteSelect={"Phrase","Description","Example", "Chapter"};
        String tableName="All";
        qb.setTables(tableName);
        Cursor cursor = qb.query(db,sqliteSelect,null,null,null,null,null);
        List<Items> results = new ArrayList<>();
        if (cursor.moveToFirst()){
            do {
                Items items = new Items();
                items.setPhrase(cursor.getString(cursor.getColumnIndex("Phrase")));
                items.setDescription(cursor.getString(cursor.getColumnIndex("Description")));
                items.setExample(cursor.getString(cursor.getColumnIndex("Example")));
                items.setChapter(cursor.getString(cursor.getColumnIndex("Chapter")));
                results.add(items);
            }while (cursor.moveToNext());
        }
        return results;
    }

    public List<String> getPhrases(){
        SQLiteDatabase db = getReadableDatabase();
        SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
        String[] sqliteSelect={"Phrase"};
        String tableName="All";
        qb.setTables(tableName);
        Cursor cursor = qb.query(db,sqliteSelect,null,null,null,null,null);
        List<String> results = new ArrayList<>();
        if (cursor.moveToFirst()){
            do {
                results.add(cursor.getString(cursor.getColumnIndex("Phrase")));
            }while (cursor.moveToNext());
        }
        return results;

    }

    public List<Items> getPhrasesbyPhrase(String phrase)
    {
        SQLiteDatabase db = getReadableDatabase();
        SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
        String[] sqliteSelect={"Phrase","Description","Example","Chapter"};
        String tableName="All";
        qb.setTables(tableName);
        Cursor cursor = qb.query(db,sqliteSelect,"Phrase like ?",new String[]{"%"+phrase+"%"},null,null,null);
        List<Items> results = new ArrayList<>();
        if (cursor.moveToFirst()){
            do {
                Items items = new Items();
                items.setPhrase(cursor.getString(cursor.getColumnIndex("Phrase")));
                items.setDescription(cursor.getString(cursor.getColumnIndex("Description")));
                items.setExample(cursor.getString(cursor.getColumnIndex("Example")));
                items.setChapter(cursor.getString(cursor.getColumnIndex("Chapter")));
                results.add(items);
            }while (cursor.moveToNext());
        }
        return results;
    } }

简而言之,我的应用程序应该允许用户使用我在 MainActivity.xml 中设置的搜索栏搜索数据库,但每次我尝试打开应用程序时它都会崩溃。

我完全被难住了,如果能得到一些建议,我真的很感激。

更新: 我将表名从“All”更改为“FullBook”,现在出现此错误:

E/SQLiteLog: (1) no such table: FullBook

【问题讨论】:

  • 嗨 Rehman,ALL 是 SQLLITE 中的保留关键字(请参阅 sqlite.org/lang_keywords.html)。我会尝试重新命名您的表,然后再试一次。

标签: android sql sqlite syntax-error


【解决方案1】:

ALL 是 SQLite 和所有(我相信)rdms 的关键字(保留字)
而且您不能将其用作表的名称。
在这里可以看到SQLite的所有保留字:
https://www.sqlite.org/lang_keywords.html
如果你坚持使用,可以用方括号括起来,如[All]

【讨论】:

  • 我将表格标题更改为“FullBook”,但现在出现新错误
  • E/SQLiteLog: (1) no such table: FullBook
  • 从模拟器/设备上卸载应用程序。在资产文件夹中复制一个新版本的数据库,其中包含具有新名称的新表,然后重新开始。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-22
  • 1970-01-01
  • 2020-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多