gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 08:28:41 25 4
gpt4 key购买 nike

我正在尝试从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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com