-1

MS-SQLServerを使用しています。の近くで例外が発生していConvertます。これが私の質問です:

String query1="select * from pat.dbo.Demand_Register 
               where (select (Convert (datetime,Payment_Date,103)) as pd 
                      from pat.dbo.Demand_Register)
                  between '"+frmDate1+"' and '"+toDate1+"' ";

そして例外:

java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]Syntax error converting datetime from character string.
4

2 に答える 2

1

あなたのステートメントは不必要に複雑です。それを次のように単純化できます。

String query1="select * from pat.dbo.Demand_Register " +
               "where Convert (datetime,Payment_Date,103) " + 
               "between '"+frmDate1+"' and '"+toDate1+"' ";

しかし、これはまだ良い考えではありません。java.sql.DateからインスタンスをfrmDate1作成toDate1し、PreparedStatement で使用する必要があります。

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
java.sql.Date from = new java.sql.Date(sdf.parse(frmDate1));
java.sql.Date to = new java.sql.Date(sdf.parse(toDate1));
String query1="select * from pat.dbo.Demand_Register " +
               "where Payment_Date between ? and ?";
PreparedStatement stmt = connection.prepareStatement();
stmt.setDate(1, from);
stmt.setDate(2, to);
ResultSet rs = stmt.executeQuery();

これにより、SQL インジェクションから保護されるだけでなく、潜在的なインデックスをPayment_Date使用できるため、より高速になる可能性もあります。

于 2012-08-08T19:20:12.103 に答える