android - “Table” : syntax error附近的E/SQLiteLog:(1)

标签 android sql sqlite syntax-error

我正在尝试从android中的SQLite开始,但是我有一些问题。
我从2012年编写的教程中获取了代码,但现在对我不起作用,并向我显示此错误:

E/SQLiteLog﹕ (1) near "Table": syntax error



问题在于创建/打开数据库。
package db.com.example.kids1.databasetest;

import android.app.ListActivity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

import org.w3c.dom.Text;

import java.io.IOException;
import java.util.ArrayList;

public class MainActivity extends ListActivity{

    private final String DB_NAME = "Database";
    private final String TABLE_NAME = "Table";
    SQLiteDatabase DB = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ArrayList<String> results = new ArrayList<>();

        String[] res = {"Red", "Green", "Text"};



        try {
            DB = this.openOrCreateDatabase(DB_NAME, MODE_PRIVATE, null);
            DB.execSQL("CREATE TABLE IF NOT EXISTS " +
                TABLE_NAME +
                "(Name VARCHAR, Street VARCHAR, Block INT, City VARCHAR, Tel VARCHAR);");
            mFillDbsTable();

            Cursor c = DB.rawQuery("SELECT Name, Street, Block, City, Tel FROM " +
                    TABLE_NAME +
                    " where Blcok == 9 LIMIT 5", null);
            if (c!=null){

                if (c.moveToFirst()) {
                    do {

                        String name = c.getString(c.getColumnIndex("Name"));
                        String street = c.getString(c.getColumnIndex("Street"));
                        int block = c.getInt(c.getColumnIndex("Block"));
                        String city = c.getString(c.getColumnIndex("City"));
                        String tel = c.getString(c.getColumnIndex("Tel"));

                        results.add(name + "," + street + "," + block + "," + city + "," + tel);
                    } while (c.moveToNext());
                }
            }

            ListView list = (ListView)findViewById(android.R.id.list);


            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, res);

            list.setAdapter(adapter);

        } catch (SQLiteException se){
            Log.e(getClass().getSimpleName(), "Create/Open Database Problem.");
        }

    }

    private void mFillDbsTable(){

        try {
            DB.execSQL("INSERT INTO " +
                    TABLE_NAME +
                    " Values('Noam', 'Shkolnik', 9, 'Rehovot', '054-4900807');");

            DB.execSQL("INSERT INTO " +
                    TABLE_NAME +
                    " Values('Eyal', 'Shkolnik', 9, 'Rehovot', '055-4488779');");

            DB.execSQL("INSERT INTO " +
                    TABLE_NAME +
                    " Values('Yehontan', 'Shkolnik', 9, 'Rehovot', '058-7789547');");
        } catch (SQLiteException se) {
            Log.e(getClass().getSimpleName(), "Could not create records.");
        }

    }
}

最佳答案

private final String TABLE_NAME = "Table"

您无法创建名为Table的表,因为它是保留关键字。
您最好创建一个名为MyTable的表(或_Table或更好地使用更健谈的名称,例如Persons-注意为复数形式)。

所以:
private final String TABLE_NAME = "MyTable"

供您引用:https://sqlite.org/lang_keywords.html

可以(但不建议)使用保留关键字,但是随后每次引用该表时都必须使用特殊的分隔符。

就像是
private final String TABLE_NAME = "[Table]"

而且查询中还有另一个(双重)错误:
" where Blcok == 9 LIMIT 5"

应该
" where Block = 9 LIMIT 5"

关于android - “Table” : syntax error附近的E/SQLiteLog:(1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32465712/

相关文章:

Android Emulator 不会运行从 Eclipse 启动的应用程序

sql - 如何更新具有特定列名的所有表

mysql - 从 mySql 中的表中获取行数

sqlite - 如何以编程方式获取sqlite中所有表的列表

c# - 通过在 Windows Phone 的 Sqlite 数据库中运行 sql 查询来创建匿名类型列表

Android从sdcard获取图片

android - 如何在 Android 中以编程方式隐藏布局/ View

android - 如何从命令行使用 gradle 构建 Sherlock?

mysql - SQL 选择过去 45 天的所有数据

java - 为 Android SQLite 动态生成创建表查询