2017-04-21 46 views
0
private UUID getClientID(String username) { 
    try { 
     String query = "SELECT id FROM `client_table` WHERE username=" + username; 
     stmt = connection.prepareStatement(query); 
     ResultSet rs = stmt.getResultSet(); 
     return UUID.fromString(rs.getString(2)); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return null; 
} 

嗨,這裏是我的代碼和我試圖抓住的數據庫部分:http://prntscr.com/ezbomi。我想要這個ID,但它返回null。我想這是因爲查詢 - 任何想法?從數據庫獲取ID(my sql)返回null

+0

也許'rs.getString(0)'的作品? – rotgers

+0

您必須調用'Result#next'(並檢查其返回結果),以便獲得第一行(如果存在) - 我強烈建議查看[Using Prepared Statements](http:// docs。 oracle.com/javase/tutorial/jdbc/basics/prepared.html)和 [JDBC Database Access](http://docs.oracle.com/javase/tutorial/jdbc/) - 另外,由於您只是請求一個列,你應該使用'getString(1)',這將是第一列 – MadProgrammer

+1

它應該是字符串查詢=「選擇id從'client_table'其中用戶名=」+「\」「+用戶名+」\「 ;」 ; – Yahya

回答

0

試試這個。刪除了報價。除非你有充分的理由不這樣做,否則你應該始終使用預先準備的陳述。您嘗試從ResultSet訪問第二個元素的任何特定原因?

private UUID getClientID(String username) { 
    try { 
     //drop the extra quotes in the SQL statement 
     String query = "SELECT id FROM client_table WHERE username = ?"; 
     //added prepared statement 
     PreparedStatement stmt = connection.prepareStatement(query); 
     stmt.setString(1, username); 
     ResultSet rs = stmt.getResultSet(); 
     //use 1 to access the first result from the result set 
     return UUID.fromString(rs.getString(1)); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 
0

您應該在獲取數據之前移動ResultSet光標。光標最初指向頭部之前。

rs.next(); 
return UUID.fromString(rs.getString(2)); 
+0

查詢已中斷,所以這本身無助 –

+0

您也沒有檢查'next'的結果,因爲如果找不到結果,它可能會返回'false' – MadProgrammer

1
  • 你需要調用(和檢查的結果)ResultSet#nextResultSet獲得的下一行,如果存在
  • 您是否獲得了列值時需要使用的1代替2,因爲你只要求單個列和列索引在1
  • 開始你應該做PreparedStatements,參數正確使用和值綁定到語句
  • 你應利用try-with-resources來管理您的資源,並確保您清除它們,當你完成
  • 我會考慮拋出Exception,而不是抓住它,它會具有比剛回國null
更多的含義

例如

try (PreparedStatement stmt = connection.prepareStatement("SELECT id FROM `client_table` WHERE username=?")) { 
    stmt.setString(1, username); 
    ResultSet rs = stmt.getResultSet(); 
    if (rs.next()) { 
     return UUID.fromString(rs.getString(1)); 
    } 
} 

看一看:

更多細節

相關問題