com.microsoft.sqlserver.jdbc.SQLServerException: 必须声明标量变量 "@P2where"。
程序员文章站
2024-02-20 15:41:16
...
今天在JDBC连接数据库出现了com.microsoft.sqlserver.jdbc.SQLServerException: 必须声明标量变量 "@P2where"异常。预编译的prepareStatement中“?”前面不能有空格,有等号两边带空格习惯的朋友一定要注意这个问题
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown Source)
at com.microsoft.sqlserver.jdbc.IOBuffer.processPackets(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.getPrepExecResponse(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PreparedStatementExecutionRequest.executeStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.CancelableRequest.execute(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeRequest(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate(Unknown Source)
at com.db.DButil.update(DButil.java:84)
at com.Dao.StuDao.update(StuDao.java:26)
at com.Web.updateSer.doPost(updateSer.java:53)
DButil.java:84是count = ps.executeUpdate()
public int update(String sql,Object...objects) {
conn = getConn();
int count = 0;
try {
ps = conn.prepareStatement(sql);
if(objects != null && objects.length > 0) {
for (int i = 0; i < objects.length; i++) {
ps.setObject(i + 1, objects[i]);
}
}
count = ps.executeUpdate() ;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
close();
}
return count;
}
at com.Dao.StuDao.update(StuDao.java:26)是下面这行:
update("update Student set name = ?,age = ?,sex = ? where id = ?",t.getName(),t.getAge(),t.getSex(), t.getId());
百度看很多别人的文章发现说是逗号的问题,后来发现没有少逗号,后来经过修改之后正确代码如下 ,预编译的prepareStatement中“?”前面不能有空格,有等号两边带空格习惯的朋友一定要注意这个问题
update("update Student set name=?,age=?,sex=? where id=?", t.getName(),t.getAge(),t.getSex(), t.getId());
上一篇: 获取用户位置
下一篇: Swift3.0 - 类和结构体的区别
推荐阅读
-
com.microsoft.sqlserver.jdbc.SQLServerException: 必须声明标量变量 "@P2where"。
-
Java连接SQL server数据库时报出 com.microsoft.sqlserver.jdbc.SQLServerException: 必须声明表变量 "@P0"。错误
-
局部内部类访问它所在方法的局部变量时,要求该局部变量必须声明为final的原因
-
必须声明标量变量 "@tempTable"
-
局部内部类访问它所在方法的局部变量时,要求该局部变量必须声明为final的原因
-
必须声明标量变量 "@tempTable"
-
javascript变量声明必须用var吗
-
javascript变量声明必须用var吗