Netbeans 准备语句错误
我有错误。 当我运行该文件时,它声明 信息:SQL异常命中:参数索引超出范围(2>参数数,即0) 我还有一个错误,语法错误Netbeans 准备语句错误,netbeans,Netbeans,我有错误。 当我运行该文件时,它声明 信息:SQL异常命中:参数索引超出范围(2>参数数,即0) 我还有一个错误,语法错误 "INSERT INTO Customers(MembershipID,Contact,Email,Address,SurveyStatus,Subscription) VALUES" + "?" + "," + "?" + "," + "?" + "," + "?" + "," + "?" + "," + "?"); 在PreparedStatement中,使用不带
"INSERT INTO Customers(MembershipID,Contact,Email,Address,SurveyStatus,Subscription) VALUES"
+ "?" + "," + "?" + "," + "?" + "," + "?" + "," + "?" + "," + "?");
在
PreparedStatement
中,使用不带引号的?
字符表示参数替换
PreparedStatement pst = conn.prepareStatement(
"UPDATE Customers SET Contact = ?,"
+ "Email = ?,"
+ "Address = ?,"
+ "SurveyStatus = ?,"
+ "Subscription = ? "
+ "WHERE MembershipID = ? " );
通过直接替换值,您正在违背PreparedStatement
的目的。那么您的pst.setString()
调用就没有意义了,因为没有任何?
需要替换
出现错误消息是因为解析器正在计数?
,并找到零。当您第一次执行.setString()
时,它会惊慌失措
还要注意,您需要更改
.setString()
调用中的索引<代码>成员ID是最后一个?
,因此它应该是第6个,其他索引应该相应地进行调整。像这样编写您准备好的声明:
PreparedStatement pst = conn.prepareStatement( "UPDATE Customers SET Contact =?, Email = ?, Address = ?,SurveyStatus =?,Subscription =? WHERE MembershipID =?" );
不要用问号代替变量,只需将它们放在字符串中,如下所示:
myStatementSql=“插入客户(成员身份ID、联系人、电子邮件、地址、调查状态、订阅)值(?,,,?,,?)”
INFO:SQL异常命中:第1行“Subscription”列截断的数据,如Java端使用的数据类型与SQL端的数据类型不匹配。Java中的订阅值是否比数据库所能处理的时间长,也许?奇怪。对于我的更新,它仍然可以工作。但是对于insert,它不能确保.setXXX()
方法中的数据类型也与数据库中的数据类型匹配。没有真正的方法跨Java/数据库边界强制执行类型安全。
PreparedStatement pst = conn.prepareStatement( "UPDATE Customers SET Contact =?, Email = ?, Address = ?,SurveyStatus =?,Subscription =? WHERE MembershipID =?" );