Netbeans 准备语句错误

Netbeans 准备语句错误,netbeans,Netbeans,我有错误。 当我运行该文件时,它声明 信息:SQL异常命中:参数索引超出范围(2>参数数,即0) 我还有一个错误,语法错误 "INSERT INTO Customers(MembershipID,Contact,Email,Address,SurveyStatus,Subscription) VALUES" + "?" + "," + "?" + "," + "?" + "," + "?" + "," + "?" + "," + "?"); 在PreparedStatement中,使用不带

我有错误。 当我运行该文件时,它声明 信息:SQL异常命中:参数索引超出范围(2>参数数,即0)

我还有一个错误,语法错误

"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 =?" );