2015-04-29 67 views
-1

我想從我的SQL數據庫中的表中拉出名字和姓氏。查詢在沒有「as First」部分的情況下可以很好地工作,並且我知道db連接沒問題,因爲它可以在代碼的其他部分工作。將字符串從SQL拉到java

我收到的錯誤是table "First" does not exist,但它應該查看錶名的firstName和lastName,而不是First和Last。

它與「我」for循環的內部,但這些值是正確的,playerid =我存在。

try { 
    String query2 = " SELECT firstName as First from player " 
      + "WHERE playerid = ?"; 
    PreparedStatement st2 = db.conn.prepareStatement(query); 
    st2.setInt(1, i); 
    ResultSet rs2 = st2.executeQuery(); 
    if (rs2.next()) { 
     setFirstName(rs2.getString("First")); 
    } 

    String query3 = " SELECT lastName as Last from player " 
      + "WHERE playerid = ?"; 
    PreparedStatement st3 = db.conn.prepareStatement(query); 
    st3.setInt(1, i); 
    ResultSet rs3 = st3.executeQuery(); 

    if (rs3.next()) { 
     setLastName(rs3.getString("Last")); 
    } 
} 
catch (SQLException e) { 
    e.printStackTrace(); 
} 
+2

請發佈確切的錯誤消息,你越來越。 –

+4

您每次準備'query',而不是'query2'或'query3'。什麼是「查詢」? –

+0

你是對的。我正在準備錯誤的查詢。它來自早期的代碼。這解決了問題。不知道爲什麼我沒有注意到。該錯誤消息說該表不存在,因爲它準備的查詢引用了不同的表,而不是我需要的。感謝您的幫助。 – DS1988

回答

0

更改你的代碼是這樣的:

PreparedStatement ps = null; 
try { 
    ps = db.conn.prepareStatement("SELECT firstName, lastName from player " 
     + "WHERE playerid = ?"); 

    for (int i = 0; i < MAX_PLAYERS /*<- or what is the loop condition?*/; i++) { 

     ps.setInt(1, i); 
     ResultSet rs = ps.executeQuery(); 

     if (rs.next()) { 
      // should these methods really be called within a loop? 
      setFirstName(rs.getString("firstName")); 
      setLastName(rs.getString("lastName")); 
     } 
     rs.close(); 
    } 
} catch (SQLException e) { 
    throw new RuntimeException(e); 
} finally { 
    if (ps != null) { 
     ps.close(); 
    } 
} 

一些注意事項:

當您使用的是PreparedStatement一個循環中,你應該建立一次聲明,外循環,然後只在每次迭代期間重新分配綁定變量。

您應該儘量減少對數據庫運行的查詢數量;在你的情況下,你應該在單個查詢中選擇名字和姓氏。

關閉您打開的資源非常重要(在這種情況下爲PreparedStatement)。我的例子顯示了這是如何通常在Java 7之前完成的(在finally塊中)。如果使用更新的Java版本,請使用try-with-resources statement

+0

事實證明我的錯誤是一個簡單的錯誤,但是這個代碼肯定比我做的更好。太多的SQL查詢讓代碼難以跟蹤。這很簡單。謝謝。 – DS1988