我正在为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'";
所以我的问题是,这项工作的最佳方式是什么。我的意思是我应该尝试将所有日期从组合框编辑为这种格式吗?或者我一直在做错事,应该改变吗?
提前致谢。
答案 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();