【问题标题】:Runtime Error :SQLiteException: near "contact": syntax error app stopped working [closed]运行时错误:SQLiteException:靠近“联系人”:语法错误应用程序停止工作[关闭]
【发布时间】:2017-12-03 09:02:06
【问题描述】:

我使用 SQlite 数据库创建了一个注册活动,当我点击签名按钮时,我的应用程序出现运行时错误。Stacktrace 将我引导至我为数据库创建的类 DatabaseHelper 中的第 36 行,然后显示注册活动中的错误,但我无法解决它们。任何帮助和想法都会非常有用

PS(我是 android 开发和 stackoverflow 的新手,很抱歉这篇文章很长,可能还有明显的错误
这是堆栈跟踪

E/SQLiteLog: (1) near "contact": syntax error
06-29 17:48:21.680 5897-5897/kanepraktiki2017.xyz.mreprogramming.kanepraktiki E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                                Process: kanepraktiki2017.xyz.mreprogramming.kanepraktiki, PID: 5897
                                                                                                java.lang.IllegalStateException: Could not execute method of the activity
                                                                                                    at android.view.View$1.onClick(View.java:4240)
                                                                                                    at android.view.View.performClick(View.java:5184)
                                                                                                    at android.view.View$PerformClick.run(View.java:20893)
                                                                                                    at android.os.Handler.handleCallback(Handler.java:739)
                                                                                                    at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                                    at android.os.Looper.loop(Looper.java:145)
                                                                                                    at android.app.ActivityThread.main(ActivityThread.java:5938)
                                                                                                    at java.lang.reflect.Method.invoke(Native Method)
                                                                                                    at java.lang.reflect.Method.invoke(Method.java:372)
                                                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400)
                                                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)
                                                                                                 Caused by: java.lang.reflect.InvocationTargetException
                                                                                                    at java.lang.reflect.Method.invoke(Native Method)
                                                                                                    at java.lang.reflect.Method.invoke(Method.java:372)
                                                                                                    at android.view.View$1.onClick(View.java:4235)
                                                                                                    at android.view.View.performClick(View.java:5184) 
                                                                                                    at android.view.View$PerformClick.run(View.java:20893) 
                                                                                                    at android.os.Handler.handleCallback(Handler.java:739) 
                                                                                                    at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                                                                    at android.os.Looper.loop(Looper.java:145) 
                                                                                                    at android.app.ActivityThread.main(ActivityThread.java:5938) 
                                                                                                    at java.lang.reflect.Method.invoke(Native Method) 
                                                                                                    at java.lang.reflect.Method.invoke(Method.java:372) 
                                                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400) 
                                                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195) 
                                                                                                 Caused by: android.database.sqlite.SQLiteException: near "contact": syntax error (code 1): , while compiling: create contact table(id integer primary key not null , name text not null, email text not null , username text not null, password text not null);
                                                                                                    at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
                                                                                                    at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1093)
                                                                                                    at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:670)
                                                                                                    at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
                                                                                                    at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59)
                                                                                                    at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
                                                                                                    at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1798)
                                                                                                    at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1729)
                                                                                                    at kanepraktiki2017.xyz.mreprogramming.kanepraktiki.DabaseHelper.onCreate(DabaseHelper.java:36)
                                                                                                    at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:251)
                                                                                                    at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
                                                                                                    at kanepraktiki2017.xyz.mreprogramming.kanepraktiki.DabaseHelper.insertContact(DabaseHelper.java:41)
                                                                                                    at kanepraktiki2017.xyz.mreprogramming.kanepraktiki.Signup.onSignUpClick(Signup.java:49)
                                                                                                    at java.lang.reflect.Method.invoke(Native Method) 
                                                                                                    at java.lang.reflect.Method.invoke(Method.java:372) 
                                                                                                    at android.view.View$1.onClick(View.java:4235) 
                                                                                                    at android.view.View.performClick(View.java:5184) 
                                                                                                    at android.view.View$PerformClick.run(View.java:20893) 
                                                                                                    at android.os.Handler.handleCallback(Handler.java:739) 
                                                                                                    at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                                                                    at android.os.Looper.loop(Looper.java:145)

以及 DatabaseHelper.java 代码$

Public class DabaseHelper extends SQLiteOpenHelper {

private static final int DATABASE_VERSION = 1;
private static final String DATABASE_name = "contacts.db";
private static final String TABLE_name = "contacts";
private static final String COLUMN_id = "id";
private static final String COLUMN_name = "name";
private static final String COLUMN_email = "email";
private static final String COLUMN_username = "username";
private static final String COLUMN_password = "password";
SQLiteDatabase db;

private static final String TABLE_create = "create contact table(id integer primary key not null , " +
        "name text not null, email text not null , username text not null, password text not null);";

public DabaseHelper(Context context) {
    super(context, DATABASE_name, null, DATABASE_VERSION);

}

@Override
public void onCreate(SQLiteDatabase db) {

    db.execSQL(TABLE_create);
    this.db = db;
}

public void insertContact(Contact c) {
    db = this.getWritableDatabase();
    ContentValues values = new ContentValues();

    String query="select * from contacts";
    Cursor cursor=db.rawQuery(query, null);
    int count=cursor.getCount();

    values.put(COLUMN_id, count);
    values.put(COLUMN_name, c.getName());
    values.put(COLUMN_email, c.getEmail());
    values.put(COLUMN_username, c.getUsername());
    values.put(COLUMN_password, c.getPassword());

    db.insert(DATABASE_name, null, values);
    db.close();
}

public String searchpass(String username) {
    db = this.getReadableDatabase();
    String query = "select username, password from" + TABLE_name;
    Cursor cursor = db.rawQuery(query, null);
    String a, b;
    b = "Δεν βρέθηκε";

    if (cursor.moveToFirst()) {
        do {
            a = cursor.getString(0);
            if (a.equals(username)) {
                b = cursor.getString(1);
                break;
            }
        }
        while (cursor.moveToNext());
    }
     return b;
}


@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
    String query ="Drop Table If Exists"+TABLE_name;
    db.execSQL(query);
    this.onCreate(db);

}
}

【问题讨论】:

  • 请格式化您的问题
  • CREATE Contact TABLE ... 不是有效的 SQL 命令。
  • 谢谢,我已经解决了,但仍然出现错误
  • 不要通过编辑您的问题以删除原始问题来使所有答案无效。如果您还有其他问题,请提出一个新问题(在做出适当的努力自己解决之后)。阅读how do I ask a good question?
  • 对不起,我没有这样的意图,这就是为什么我回答所有保留的答案,我很感激我只是认为没有必要再创建另一个问题,因为问题仍然存在

标签: java android android-sqlite fatal-error


【解决方案1】:

您创建新表的 SQL 语句无效。您可以切换关键字table 和表名。试试这个:

CREATE TABLE contact 
(
   id integer primary key not null,
   name text not null, 
   email text not null, 
   username text not null, 
   password text not null
);

此语句也有失败。

 String query="select * from contacts";

您可以为此使用变量 TABLE_name,但必须在此处更改表的名称。

private static final String TABLE_name = "contact";

然后像这样更改您的 SQL 语句:

String query = "SELECT * FROM" + this.TABLE_name;

【讨论】:

  • 感谢您的回答,我已更改但仍然出现问题
  • 你得到同样的错误吗?你的sql语句现在是什么样子的?
  • 是的,不同的是现在我在行 (DabaseHelper.java:45) 和我的注册类中出现错误。 Sql 我已经按照您的指示进行了更改“创建表联系人(...(我在上面的代码中也进行了更改)
  • 我看到你仍然有一个不好的说法。您应该将“从联系人中选择 *”更改为“从联系人中选择 *”。这可能是错误的原因。
  • 变量TABLE_name 的值是contacts,尽管您的表名为“contact”。你应该改变它!
【解决方案2】:

把你的陈述改成这个:

"create table contact(id integer primary key not null , " +
        "name text not null, email text not null , username text not null, password text not null);"

而不是“创建联系人表(...)”应该是“创建表联系人(...)”

编辑:如果您仍然收到错误,请更改此行:

 String query="select * from contacts";

到这里:

 String query="select * from contact";

另外,如果您不断收到错误,可能是因为您正在尝试重新创建已创建的表。请去学习 SQL、SQLite 和 Andriod 数据库连接,以便了解它的实际工作原理。互联网研究可以大大帮助您理解这些文档丰富的主题

【讨论】:

  • 感谢您的观察,但不幸的是问题仍然存在
  • @Stefania 新错误是什么?
  • 简单地说你有问题是完全没有用的——我们需要通过准确的错误信息和准确的描述来知道具体的问题是什么。
  • 我会在上面进行更新,但没有太大区别..第 36 行没有出现
  • @Stefania 我查看了您更新的异常,看起来您甚至没有将您的 sql 语句更改为我的回答所说的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
  • 2016-06-29
相关资源
最近更新 更多