简体   繁体   中英

Strange behaviour on select query on date columns

A strange behaviour of select query just came up on my way while im doing a task for the uni.Im pulling data from a table i got on my 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..

The thing is that what is displayed on my combo box is a think like '1999-10-10' After that i have to pull some data where i must select the ones with the date of the selected item on the combo box.Well there's my problem.

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

After i run that im getting an sql exception with message : Message: ORA-01861: literal does not match format string I searched a little bit the web and found that if i run this select query everything works fine

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

So my question is, what is the best way to make this work.I mean should i try edit all the dates from combo box to this format? or im doing something wrong all the way and should change that?

Thanks in advance.

You can either:

1- Override your related class' (whatever object that getSelectedItem returns, in this particular case its already a String and you may not need that String.valueOf() call) toString method to achieve the needed format of yours. (Kind of bad to do)

2- Let Oracle DB handle it with its TO_DATE function (Kind of a better practice to do)

"TO_DATE(yourDateString,dateFormat)"

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

And to prevent SQL injections, using the latter approach with a PreparedStatement would look like this:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM