Question

I have a Airport project. I have a gui in which i want to search for certain flights flights. In this gui I have a JDateChooser(because i want to find a certain flight in my database). In the database i have a column called date_dep which is a Data type. I should mention that previously I had to create flights(enter information about flights from a gui into the database) and I didn't have problems when i entered into the database the date I got from a JDateChooser. The problem now is that when i try and search for a certain flight I get this error:

org.postgresql.util.PSQLException: ERROR: syntax error at or near "Apr"

I figure that "Apr" is from April since i am searching for flights on the 24th of April. So I guess my problem is something with the formats but I tried many things without any luck. Do you have any idea what it could be? Thanks in advance. I can post more code if it helps.

dateCh is the name of my Jdatechooser.

try {

        con = DriverManager.getConnection(url, user, password);
        pst = con.prepareStatement("SELECT * FROM flight WHERE route_id="+routeid+ "AND date_dep="+dateCh.getDate());
        rs = pst.executeQuery();

        // erase everything from the list before refreshing it
        flightlist.clear();
        while (rs.next()) {
            flightlist.addElement(rs.getInt(1) + " : Flight ID" + "  |  "
                    + "Route ID: " + rs.getInt(2) + "  |  "+"Date: "+ rs.getDate(4)+ "  |  "+"Time: "+rs.getTime(5)+ "  |  "
                    + "Plane ID "+rs.getInt(3)+ "  |  "+"Economy seats: "+rs.getInt(6)+"  |  "+"Business seats: "+rs.getInt(7)+"  |  "
                    + "First class seats: "+rs.getInt(8)+"\n");
        }

    } catch (SQLException e) {
        System.out.println("Connection failed!");
        e.printStackTrace();
        return;
    }

After fixing my code

pst = con.prepareStatement("SELECT * FROM flight WHERE route_id=? AND date_dep=?");
        rs = pst.executeQuery();
        pst.setInt(1, routeid);
        pst.setDate(2, sqlDate);

I get this error now. I found online that there is some kind og bug with postgres but i don't know how to fix it.

org.postgresql.util.PSQLException: No value specified for parameter 1

My bad, I was executing the query before setting the values. I works now. Thank you very much

Was it helpful?

Solution 2

Check the PreparedStatement docs on how to use it properly.

You should write your query as follows -

pst = con.prepareStatement("SELECT * FROM flight WHERE route_id= ? AND date_dep= ?");

And set the arguments as follows -

//pst.setXXX(1, routed); just choose the appropriate type for the route_id column
pst.setDate(2, dateCh.getDate());

Note that currently you are not even enclosing your arguments in quotes. A properly written query would look something like ... where col1 = 'val1' and col2 = 'val2' ....

When you do something like ... "AND date_dep="+dateCh.getDate() ..., that's equivalent to doing ..."AND date_dep="+dateCh.getDate().toString().... Which eventually yields something like ... AND date_dep=Apr ....

OTHER TIPS

A few things:

  1. Don't append strings to put parameters into your query. Put placeholders in the query and then bind the parameters.

  2. Do whatever you need to do to construct a Date object from your date chooser, then bind it to the appropriate query placeholder (see #1)

  3. Be careful with the time component of the date. If you only care about dates, and not times, always set the time parts of the date to 0. If you are storing dates with times but just querying by date, you're going to have to query for flights where the date is greater than midnight on the previous date and less than midnight on the date in question.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top