我有一個動態的查詢字符串。我在數據庫中搜索的項目是基於用戶在html表單上的複選框中選擇的內容。用戶類型從下拉列表中選擇城市名稱。然後,用戶可以從城市的3個不同屬性中選擇:CountryCode(int),District(String)和Population(int)。Java - 解析從數據庫返回的數據時的問題
我沒有問題創建查詢。例如,如果用戶選擇塔爾薩並選擇區和人口,queryString SELECT District, Population FROM City WHERE name ='Tulsa'
創建沒有問題。又如,如果用戶簡單地選擇了塔爾薩的國家代碼,則創建的查詢字符串將是SELECT CountryCode FROM City WHERE name ='Tulsa'
。
問題是解析數據並將其整齊地顯示在屏幕上。我不是數據庫程序員,所以我有一段艱難的時光。這是我的代碼的珍聞,所以你可以看到我在做什麼。
我可以正確做的唯一事情是如果用戶選擇區和人口。其他選擇不起作用。我基本上是硬編碼區和人口。我不知道如何動態解析它。這是代碼。查詢字符串是SELECT District, Population FROM City WHERE name ='Tulsa'
。它是我唯一可以工作的人。
public String getData(String c)
{
String query = c;
ResultSet rs = null;
StringBuffer back = new StringBuffer();
try
{
rs = st.executeQuery(c);
ResultSetMetaData rsmd = rs.getMetaData();
int numColumns = rsmd.getColumnCount();
back.append("number of columns is " + numColumns);
back.append("</br>");
back.append("<table border=\"10\" >\n");
while(rs.next())
{
if(rsmd.getColumnTypeName(1).equals("CHAR"))
back.append("<tr><td>" + rsmd.getColumnName(1) + "</td>" + "<td>" + rs.getString(1) + "</trd</tr>");
if(rsmd.getColumnTypeName(2).equals("INT"))
back.append("<tr><td>" + rsmd.getColumnName(2) + "</td>" + "<td>" + Integer.toString(rs.getInt(2)) + "</td></tr>");
}
back.append("</table>");
}
catch(SQLException e)
{
back.append("<h6>something bad is happening</h6>");
e.printStackTrace();
return null;
}
return new String(back);
}
我希望你們明白我在問什麼。非常感謝您的幫助!
老實說,這種方法有太多的錯誤,我強烈建議修改整個方法。這對SQL注入攻擊,連接超時,資源泄漏以及數據庫和用戶界面邏輯的緊密耦合非常敏感。 – BalusC 2011-03-10 19:25:04
@BalusC - 雖然我同意...嬰兒的步驟。每個人都必須從某個地方開始。 – 2011-03-10 19:32:17
謝謝......這是爲了我自己的小項目。試圖自學一些數據庫編程。這不會被髮送到真實的世界或任何東西。只是爲了我自己的快樂。謝謝!我也有工作:-) – Johnrad 2011-03-10 19:33:19