通过JDBC查询Oracle DB会产生null,而直接查询会提供输出

时间:2013-05-28 02:22:52

标签: java sql oracle jdbc

我有一个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)都使用相同的用户名和密码。所以我认为没有特权或安全问题。

1 个答案:

答案 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