Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试输入带有空格的字符串时SQLite崩溃_Java_Android_Sqlite_Android Sqlite - Fatal编程技术网

Java 尝试输入带有空格的字符串时SQLite崩溃

Java 尝试输入带有空格的字符串时SQLite崩溃,java,android,sqlite,android-sqlite,Java,Android,Sqlite,Android Sqlite,我正在创建一个应用程序,它有一个默认表,存储其他表的内容,这样当您尝试将自己的输入放入应用程序时,它将存储这些表,但是当您尝试将一个表添加到默认表时,它将完美地工作,除非有一个空间测试可以工作完美测试1将使应用程序崩溃。这是检索用户输入的字符串的代码: t = new Table(this); t.open(); final AlertDialog.Builder alert = new AlertDialog.Builder(this); final EditText input = new

我正在创建一个应用程序,它有一个默认表,存储其他表的内容,这样当您尝试将自己的输入放入应用程序时,它将存储这些表,但是当您尝试将一个表添加到默认表时,它将完美地工作,除非有一个空间测试可以工作完美测试1将使应用程序崩溃。这是检索用户输入的字符串的代码:

t = new Table(this);
t.open();
final AlertDialog.Builder alert = new AlertDialog.Builder(this);
final EditText input = new EditText(this);
alert.setView(input);
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
        rListName = input.getText().toString();
        t.createNew(rListName + "DB");
        t.createList(rListName, rListName + "DB");
        t.close();
    }
});
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
        dialog.cancel();
    }
});
alert.show();
这是我的createNew和createList:

public void createNew(String TABLE_NAME){
if(DATABASE_STATUS == "new"){
    ourHelper.createNew(ourDatabase, TABLE_NAME);
    System.out.println("Creating " + TABLE_NAME);
}else{
    System.out.print("Already Created");
    }
}


public long createList(String listName, String listDB){
    ContentValues cv = new ContentValues();
    cv.put(KEY_LISTNAME, listName);
    cv.put(KEY_LISTDB, listDB);
    return ourDatabase.insert(DEFAULT_TABLE, null, cv);
}
为创建新表而执行的我的createNew

public void createNew(SQLiteDatabase db, String TABLE_NAME){
    db.execSQL("CREATE TABLE " + TABLE_NAME + " (" + 
    KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
    KEY_QUESTION + " TEXT NOT NULL, " +
    KEY_PATH + " TEXT NOT NULL);"
    );
}
最后但不是租赁,我的日志:

11-25 22:02:30.418: I/SqliteDatabaseCpp(24726): sqlite returned: error code = 1, msg = near "helloDB": syntax error
11-25 22:02:30.428: D/AndroidRuntime(24726): Shutting down VM
11-25 22:02:30.428: W/dalvikvm(24726): threadid=1: thread exiting with uncaught exception (group=0x40ab9228)
11-25 22:02:30.438: E/AndroidRuntime(24726): FATAL EXCEPTION: main
11-25 22:02:30.438: E/AndroidRuntime(24726): android.database.sqlite.SQLiteException: near "helloDB": syntax error: , while compiling: CREATE TABLE hello helloDB (_id INTEGER PRIMARY KEY AUTOINCREMENT, question TEXT NOT NULL, path TEXT NOT NULL);
11-25 22:02:30.438: E/AndroidRuntime(24726):    at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
11-25 22:02:30.438: E/AndroidRuntime(24726):    at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:68)
11-25 22:02:30.438: E/AndroidRuntime(24726):    at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:141)
11-25 22:02:30.438: E/AndroidRuntime(24726):    at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:368)
11-25 22:02:30.438: E/AndroidRuntime(24726):    at android.database.sqlite.SQLiteStatement.acquireAndLock(SQLiteStatement.java:272)
11-25 22:02:30.438: E/AndroidRuntime(24726):    at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:84)
11-25 22:02:30.438: E/AndroidRuntime(24726):    at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:2031)
11-25 22:02:30.438: E/AndroidRuntime(24726):    at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1971)
11-25 22:02:30.438: E/AndroidRuntime(24726):    at com.mitterederStudios.Quiz.Table$DbHelper.createNew(Table.java:49)
11-25 22:02:30.438: E/AndroidRuntime(24726):    at com.mitterederStudios.Quiz.Table.createNew(Table.java:94)
11-25 22:02:30.438: E/AndroidRuntime(24726):    at com.mitterederStudios.Quiz.Menu$1.onClick(Menu.java:56)
11-25 22:02:30.438: E/AndroidRuntime(24726):    at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:174)
11-25 22:02:30.438: E/AndroidRuntime(24726):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-25 22:02:30.438: E/AndroidRuntime(24726):    at android.os.Looper.loop(Looper.java:154)
11-25 22:02:30.438: E/AndroidRuntime(24726):    at android.app.ActivityThread.main(ActivityThread.java:4945)
11-25 22:02:30.438: E/AndroidRuntime(24726):    at java.lang.reflect.Method.invokeNative(Native Method)
11-25 22:02:30.438: E/AndroidRuntime(24726):    at java.lang.reflect.Method.invoke(Method.java:511)
11-25 22:02:30.438: E/AndroidRuntime(24726):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
11-25 22:02:30.438: E/AndroidRuntime(24726):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
11-25 22:02:30.438: E/AndroidRuntime(24726):    at dalvik.system.NativeStart.main(Native Method)

如果确实需要空格,则需要在表名周围加引号,以便测试1。然而,这通常是一个坏主意,我会用下划线替换空格,这样它就成为test_1。

如果您真的想要空格,您需要在表名周围加引号,这样它的test 1就可以了。然而,这通常是一个坏主意,我会用下划线替换空格,这样它就变成了test_1。

hello hello是我在创建表时输入的值,如果没有空格,那么它工作正常,但是如果它崩溃的原因是空格,那么这就回答了我的问题,我猜这是一个非常常见的错误。解决此问题需要对特殊字符进行编码或解码。在您的例子中,它只是一个空格。hello hello是我在创建表时输入的值,如果没有空格,那么它工作正常,但是如果它崩溃的原因是空格,那么这就回答了我的问题,我猜这是一个非常常见的错误。解决此问题需要对特殊字符进行编码或解码。在您的情况下,它只是一个空格。谢谢,我使用了rListName.ReplaceAll\\s;谢谢,我使用了rListName.ReplaceAll\\s;