2014-09-02 64 views
0

Android開發似乎對我而言是一種錯誤的禍害,所以我再次回答一個問題。 我創建通過的SQLite數據庫連接,但我收到以下錯誤:Android:SQLite數據庫「沒有這樣的表存在」

(1) no such table: TABLE_NAME 

我試圖重新安裝我的應用程序,重命名.db文件的應用程序能夠創建和其他一些方法,我發現在線,但沒有工作。總的來說,我一直堅持這幾天。

我的代碼:

MainActivity

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    setGlobalContext(this); 
    SQL = new SQLLib(this); 

    Button LoginBtn = (Button)findViewById(R.id.login_btn); 
    LoginBtn.setOnClickListener(this); 
    Button RegisterBtn = (Button)findViewById(R.id.register_btn); 
    RegisterBtn.setOnClickListener(this); 

    newTab("Tag1", R.id.login, "Login"); 
    newTab("Tag2", R.id.newitem, "Nieuw"); 
    newTab("Tag3", R.id.viewitems, "Overzicht"); 

    getTabHost().setCurrentTab(0); 
    hideTab(1); 
    hideTab(2); 
} 

登錄功能 - 連接到LoginBtn

public void Login(){ 
    if(Username.replaceAll(" ", "") != "" && Password.replaceAll(" ", "") != ""){ 
     if(SQL.SelectString("SELECT PASSWORD FROM USERLOGIN WHERE USERNAME = '"+Username+"'") == Password){ 
      Message("Login"); 
     }else{ 
      Message(SQL.SelectString("SELECT PASSWORD FROM USERLOGIN WHERE USERNAME = '"+Username+"'")+", "+Password); 
     } 
    }else{ 
     Message("Not all data is inserted. Try again!"); 
    } 
} 

註冊功能 - 連接到RegisterBtn

public void Register(){ 
    if(Username.replaceAll(" ", "") != "" && Password.replaceAll(" ", "") != ""){ 
     if(SQL.SelectString("SELECT USERNAME FROM USERLOGIN WHERE USERNAME = '" + Username+"'") == ""){ 
      SQL.Insert("USERLOGIN", new String[]{"USERNAME", "PASSWORD"}, new String[]{"\""+Username+"\"", "\""+Password+"\""}); 
     }else{ 
      Message("User'"+Username+"' already exists!"); 
     } 
    }else{ 
     Message("Not all data is inserted. Try again!"); 
    } 
} 

SQLLIB

private static final String DATABASE_NAME = "pwmanagement.db"; 
private static final int DATABASE_VERSION = 1; 

public SQLLib(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.rawQuery("CREATE TABLE userlogin (_id INTEGER PRIMARY KEY AUTOINCREMENT, USERNAME TEXT, PASSWORD TEXT);", null); 
    db.rawQuery("CREATE TABLE passwords (_id INTEGER PRIMARY KEY AUTOINCREMENT, USERLOGIN INTEGER, USERNAME TEXT, PASSWORD TEXT);", null); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

} 

public void Insert(String table, String[] columns, String[] contents){ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    if(columns.length == contents.length){ 
     ContentValues values = new ContentValues(); 

     for(int i = 0; i < contents.length; i++){ 
      values.put(columns[i], contents[i]); 
     } 

     db.insert(table, null, values); 
    } 

    db.close(); 
} 

public String SelectString(String query){ 
    SQLiteDatabase db = this.getReadableDatabase(); 
    String s = ""; 
    Cursor cursor; 

    cursor = db.rawQuery(query, null); 

    while(cursor.moveToNext()){ 
     s = cursor.getString(0); 
    } 

    db.close(); 
    return s.replaceAll(" ", ""); 
} 

完全錯誤

09-02 17:28:23.485: E/SQLiteLog(7569): (1) no such table: USERLOGIN 
09-02 17:28:23.495: E/AndroidRuntime(7569): FATAL EXCEPTION: main 
09-02 17:28:23.495: E/AndroidRuntime(7569): Process: com.example.password, PID: 7569 
09-02 17:28:23.495: E/AndroidRuntime(7569): android.database.sqlite.SQLiteException: no such table: USERLOGIN (code 1): , while compiling: SELECT USERNAME FROM USERLOGIN WHERE USERNAME = 'steven' 
09-02 17:28:23.495: E/AndroidRuntime(7569):  at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 
09-02 17:28:23.495: E/AndroidRuntime(7569):  at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:923) 
09-02 17:28:23.495: E/AndroidRuntime(7569):  at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:534) 
09-02 17:28:23.495: E/AndroidRuntime(7569):  at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 
09-02 17:28:23.495: E/AndroidRuntime(7569):  at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) 
09-02 17:28:23.495: E/AndroidRuntime(7569):  at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37) 
09-02 17:28:23.495: E/AndroidRuntime(7569):  at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:65) 
09-02 17:28:23.495: E/AndroidRuntime(7569):  at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1370) 
09-02 17:28:23.495: E/AndroidRuntime(7569):  at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1309) 
09-02 17:28:23.495: E/AndroidRuntime(7569):  at com.example.password.SQLLib.SelectString(SQLLib.java:62) 
09-02 17:28:23.495: E/AndroidRuntime(7569):  at com.example.password.MainActivity.Register(MainActivity.java:85) 
09-02 17:28:23.495: E/AndroidRuntime(7569):  at com.example.password.MainActivity.onClick(MainActivity.java:50) 
09-02 17:28:23.495: E/AndroidRuntime(7569):  at android.view.View.performClick(View.java:4470) 
09-02 17:28:23.495: E/AndroidRuntime(7569):  at android.view.View$PerformClick.run(View.java:18593) 
09-02 17:28:23.495: E/AndroidRuntime(7569):  at android.os.Handler.handleCallback(Handler.java:733) 
09-02 17:28:23.495: E/AndroidRuntime(7569):  at android.os.Handler.dispatchMessage(Handler.java:95) 
09-02 17:28:23.495: E/AndroidRuntime(7569):  at android.os.Looper.loop(Looper.java:157) 
09-02 17:28:23.495: E/AndroidRuntime(7569):  at android.app.ActivityThread.main(ActivityThread.java:5867) 
09-02 17:28:23.495: E/AndroidRuntime(7569):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-02 17:28:23.495: E/AndroidRuntime(7569):  at java.lang.reflect.Method.invoke(Method.java:515) 
09-02 17:28:23.495: E/AndroidRuntime(7569):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
09-02 17:28:23.495: E/AndroidRuntime(7569):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:674) 
09-02 17:28:23.495: E/AndroidRuntime(7569):  at dalvik.system.NativeStart.main(Native Method) 

的logcat的所以,我的問題是: 哪裏是哪裏來的這個錯誤,我該如何解決?我遵循我在網上找到的步驟,甚至在我擁有的書籍中。

回答

3

您使用了錯誤的指令,你的表不會創建:

db.rawQuery("CREATE TABLE... 

應該是:

db.execSQL("CREATE TABLE... 

rawQuery()僅用於執行SELECT語句(SQL 查詢)。沒有其他人。
命令所有其他SQL通過execSQL()

+0

執行對不起我,而我去感覺像一個doofus。謝謝你,弗蘭克。 – Zubaja 2014-09-02 16:43:05

+0

不管。我們不是出生「已經學會」。 – 2014-09-02 16:45:20

相關問題