2013-05-28 51 views
0

我有一個sql查詢,當我通過SQLDeveloper手動發送到Oracle數據庫時,應用程序獲取我想要的輸出。但是,當我嘗試通過JDBC驅動程序進行連接和查詢時,同樣的查詢不會返回任何結果。請幫幫我。通過JDBC向Oracle DB詢問時給出空值,而直接查詢給出的結果

代碼:

String sql = "select * from tablename where id='" + id + "' AND case_id = '" + case_id + "'"; 

stmt = con.createStatement(); 
rs = stmt.executeQuery(sql); 
System.out.println(sql); 
System.out.println("next = " + rs.next()); 

輸出:

select * from tablename where id='1' AND case_id = '1000' 
next = false 

兩個連接(JDBC和的SQLDeveloper)正在使用相同的用戶名和密碼。所以沒有我想到的特權或安全問題。

+0

什麼是列類型? – BevynQ

+0

您是否嘗試過直接在代碼中放入id和case_id的值? –

+0

我已經執行了由'System.out.println(sql);'行打印的輸出sql,並且我得到了輸出 – prashu132

回答

2

嘗試將「id」作爲數字。在將ID作爲字符串傳遞時,JDBC驅動程序會將其轉換爲CHAR,VARCHAR或LONGVARCHAR。

String sql = "select * from tablename where id=" + id + " AND case_id = '" + case_id + "'"; 

得到的字符串:

select * from tablename where id=1 AND case_id = '1000' 

考慮在使用PreparedStatement與綁定參數,以避免SQL注入:

String sql = "select * from tablename where id = ? AND case_id = ?"; 

PreparedStatement ps = conn.prepareStatement(sql); 
ps.setInt(1, 1); 
ps.setString(2, "1000"); 

ResultSet rs = ps.executeQuery(); 

參考文獻:

http://docs.oracle.com/javase/6/docs/technotes/guides/jdbc/getstart/mapping.html http://docs.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html

+0

感謝您的提示花花公子:) – prashu132