2017-04-05 91 views
0

試圖做一個基本的登錄活動,但我仍然是相當新的這一切。 我在數據庫中有一個用戶名和密碼(我將添加功能來快速添加更多用戶)。我想要的是,當他們鍵入他們的用戶名和密碼時,它會檢查數據庫中是否存在該對,如果是這樣,則返回true,否則返回false。如何檢查用戶名和密碼是否在數據庫SQLite中?

因此,這是在我的DB連接器

public boolean checkLogin(String username, String password) { 
    SQLiteDatabase db = md.getWritableDatabase(); 

    String s; 
    Cursor c = db.rawQuery("SELECT * FROM MyTable WHERE " + username + " =? AND" + password + " =?", null); 

    if(c.getCount() <= 0) { 
     c.close(); 
     db.close(); 
     return false; 
    } else { 
     c.close(); 
     db.close(); 
     return true; 
    } 
} 

這是該代碼被稱爲 - 在我的主要活動

 btnSubmit.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Boolean validUser = myDB.checkLogin(username.getText().toString(), password.getText().toString()); 

      if(validUser == true) { 
       Intent i = new Intent(getApplicationContext(), DBTest.class); 
       startActivity(i); 
      } else { 
       Toast.makeText(getApplicationContext(), "Invalid login", Toast.LENGTH_SHORT).show(); 
      } 

     } 
    }); 

以下是錯誤。從我知道什麼是語法錯誤,但我也不太清楚如何去修改它

04-05 19:08:46.536 11313-11313/com.example.c1641195.testproject E/SQLiteLog:(1 )在「AND1234」附近:語法錯誤 04-05 19:08:46.536 11313-11313/com.example.c1641195.testproject D/AndroidRuntime:關閉VM 04-05 19:08:46.536 11313-11313/com。 example.c1641195.testproject E/AndroidRuntime:FATAL EXCEPTION:main 進程:com.example.c1641195.testproject,PID:11313 android.database.sqlite.SQLiteException:接近「AND1234」:語法錯誤(代碼1):,while編譯:SELECT * FROM歷史WHERE Admin =? AND1234 =? 在android.database.sqlite.SQLiteConnection.nativePrepareStatement(本機方法) 在android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887) 在android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:498 ) at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) at android.database.sqlite.SQLiteProgram。(SQLiteProgram.java:58) at android.database.sqlite.SQLiteQuery。(SQLiteQuery.java :37) at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44) at android.database.sqlite.S QLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1316) 在android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1255) 在com.example.c1641195.testproject.MyDBConnector.checkLogin(MyDBConnector.java:66) 在com.example.c1641195.testproject.MainActivity $ 1.onClick(MainActivity.java:30) at android.view.View.performClick(View.java:5198) at android.view.View $ PerformClick.run(View.java :21147) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148 )(Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java) :726) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

回答

0

有在這條線" =? AND" + password它結合了AND和返回的密碼語法錯誤。因此,嘗試" =? AND " + password其中AND

0

後留下了空間,也許你應該試試這個:

"SELECT t FROM MyTable t WHERE t.username = '" username + "' AND t.password = '" + password+"'", null 
0

您所查詢的是像下面

SELECT * FROM History WHERE Admin =? AND1234 =? 

您未使用表中的列名,並通過用戶名並pwd ..將其更改爲您的表格列名稱,然後在查詢中的'AND'後面添加空格。

所以您的查詢應該是

Select * from Histroy where History.UsernameColumnname='Admin' 
and History.PasswordColumnname='12345' 
相關問題