我有一个SQL查询,当我通过SQLDeveloper手动发送到Oracle DB时,我得到了我想要的输出。但是当我尝试通过JDBC驱动程序连接和查询时,同样的查询没有返回任何内容。请帮帮我。
码
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 :(得分:2)
尝试将“id”作为数字传递。当您将ID作为String传递时,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与bind参数一起使用,以避免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