1

このクエリを作成したい:

    Class.forName("org.postgresql.Driver");
    Connection conn= null;
    conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgis","postgres","123456");
    PreparedStatement ps = null;
    String sql = "SELECT num FROM parcels WHERE code_initial_right =(SELECT code_document FROM documents WHERE number_document=? or date_document='"+docd+"')";
    ps = conn.prepareStatement(sql);
    ps.setString(1,docn);
    ResultSet rs = ps.executeQuery();

しかしdocd、equals にすることができますnull。これを試すと、エラーが発生します:

javax.servlet.ServletException: org.postgresql.util.PSQLException: ERROR: invalid input syntax for type date: ""

これで何ができますか?

4

3 に答える 3

3

IS NULL述語を使用します。

....
OR docd IS NULL OR date_document = docd;
于 2012-11-29T09:42:42.970 に答える
1

使用if:

StringBuilder sql = new StringBuilder("SELECT num FROM parcels WHERE code_initial_right =");
if (docd != null) {
   sql.append("(SELECT code_document FROM documents WHERE number_document=? or date_document='"+docd+"')");
}else {
   sql.append("(SELECT code_document FROM documents WHERE number_document=?)");
}
ps = conn.prepareStatement(sql.toString());
于 2012-11-29T09:54:34.053 に答える
1

次のようにISNULL (date_document, default_date) を試してください:

String sql = "SELECT num FROM parcels WHERE code_initial_right =(SELECT code_document FROM documents WHERE number_document=? or isnull(date_document, '"+docd+"') ='"+docd+"')";
于 2012-11-29T09:55:45.747 に答える