日期列上的选择查询的奇怪行为

时间:2017-04-30 15:10:56

标签: java select jdbc ojdbc

我正在为uni.Im从我在oracle db上的表中提取数据的任务时出现了一个奇怪的选择查询行为。

selectString = "select * from reservation";
prestatement = dbConnection.prepareStatement(selectString);
rs = prestatement.executeQuery(selectString);
while (rs.next()) {
    String rdate = rs.getString("reservdate").substring(0, 10);
    jComboBox1.addItem(rdate);
//....
//....etc..

问题是我的组合框上显示的内容是'1999-10-10' 之后我必须提取一些数据,我必须在组合框中选择具有所选项目日期的那些数据。这是我的问题。

String x = String.valueOf(jComboBox1.getSelectedItem());
selectString="select * from reservation where reservdate='"+x+"'";
//...etc..

运行后我得到一个带有消息的sql异常:消息:ORA-01861:literal与格式字符串不匹配 我搜索了一下网页,发现如果我运行这个选择查询一切正常

selectString="select * from reservation where reservdate='10-OCT-99'";

所以我的问题是,这项工作的最佳方式是什么。我的意思是我应该尝试将所有日期从组合框编辑为这种格式吗?或者我一直在做错事,应该改变吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

你可以:

1-覆盖你的相关类'(getSelectedItem返回的任何对象,在这种特殊情况下它已经是一个String,你可能不需要String.valueOf()调用)toString方法来实现你所需的格式。 (有点不好意思)

2-让Oracle DB使用其TO_DATE函数处理它(这是一种更好的做法)

“TO_DATE(yourDateString,DATEFORMAT)”

String date = String.valueOf(jComboBox1.getSelectedItem());
selectString="select * from reservation where reservdate= TO_DATE('" + date + "','DD-MON-YY')";

为防止SQL注入,将后一种方法与PreparedStatement一起使用将如下所示:

String date = String.valueOf(jComboBox1.getSelectedItem());    
String selectString="select * from reservation where reservdate= TO_DATE(?,'DD-MON-YY')";
PreparedStatement preStatement = dbConnection.prepareStatement(selectString);
preStatement.setString(1,date);
ResultSet rs = preStatement.executeQuery();

Official Docs