/**
 * 删除指定记录
 * @param fyear
 * @param dataType
 * @param fitemId
 */
public void remove(BigDecimal fyear, String dataType, int fitemId){
Connection conn = JdbcUtil.getConnection();
if(conn != null){
String sql = "delete from tmp_purchasing where fyear = ?and data_type = ? and fitemid = ?";
PreparedStatement ps = null;
try {
ps = conn.prepareStatement(sql);
ps.setBigDecimal(1,fyear);
ps.setString(2,dataType);
ps.setInt(3,fitemId);
(106) ps.executeUpdate();
}catch (SQLException e) {
e.printStackTrace();
}finally{
JdbcUtil.release(ps);
JdbcUtil.release(conn);
}
}
}一个很普通的删除方法,以前用同样的方法应用在Oracle或MySQL上绝对没问题。如今换了SQL Server 2005,这代码却失效了!并抛出异常!
----------------------------------------------------------------------------------------------------------
com.microsoft.sqlserver.jdbc.SQLServerException: 必须声明标量变量 "@P0and"。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown Source)
at com.microsoft.sqlserver.jdbc.IOBuffer.processPackets(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.sendExecute(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteUpdate(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate(Unknown Source)
at com.nissan.Service.remove(Service.java:106)
at com.nissan.util.Test.main(Test.java:26)
----------------------------------------------------------------------------------------------------------以前没用过SQL Server,现在做项目客户要用这个数据库就得用,可是这个问题从没遇到过,希望有经验的朋友告诉我怎么解决,先谢谢了!

解决方案 »

  1.   

    String sql = "delete from tmp_purchasing where fyear = ?and data_type = ? and fitemid = ?"; 是你不小心动了sql了吧,fyear = ?and前面应该有个空格
      

  2.   

    fyear = ?and data_type
    =》
    fyear = ? and data_type
      

  3.   

    String sql = "delete from tmp_purchasing 
    where fyear = ?and data_type = ? and fitemid = ?";
     如果一个字符串换行写
    通常是这样写:
    String sql = "delete from tmp_purchasing "
                 +" where fyear = ?and data_type = ? and fitemid = ? ";
    可以避免没必要的异常.