java.sql.SQLException:没有为参数1错误指定值

java.sql.SQLException:没有为参数1错误指定值,java,jdbc,Java,Jdbc,我在其他stackoverflow问题中寻找这个错误,但基本上给出的解决方案与我的代码是一样的,我不知道我做错了什么 public List<ProjectUser> findProjectUserId(int id){ List <ProjectUser> users= new ArrayList<>(); ProjectUser projectuser= null; try { String req="sel

我在其他stackoverflow问题中寻找这个错误,但基本上给出的解决方案与我的代码是一样的,我不知道我做错了什么

public List<ProjectUser> findProjectUserId(int id){
     List <ProjectUser> users= new ArrayList<>();
     ProjectUser projectuser= null;
     try {
         String req="select * from projectuser where project=?";
         PreparedStatement ps= cnx.getConnection().prepareStatement(req);
         ResultSet rs= ps.executeQuery();
         ps.setInt(1,id);
         while (rs.next()){
            projectuser= new ProjectUser(rs.getInt(1), rs.getInt(2), rs.getInt(3));
             users.add(projectuser);
         }
     } catch (SQLException ex){
         ex.printStackTrace();
     }
     return users;
}
公共列表findProjectUserId(int id){
列表用户=新建ArrayList();
ProjectUser ProjectUser=null;
试一试{
String req=“从projectuser中选择*,其中project=?”;
PreparedStatement ps=cnx.getConnection().prepareStatement(req);
结果集rs=ps.executeQuery();
ps.setInt(1,id);
while(rs.next()){
projectuser=新的projectuser(rs.getInt(1)、rs.getInt(2)、rs.getInt(3));
添加(projectuser);
}
}catch(SQLException-ex){
例如printStackTrace();
}
返回用户;
}

您应该在设置参数后执行您的语句:

ps.setInt(1,id);//set param
ResultSet rs= ps.executeQuery();//then execute your statement

您正在尝试在执行查询之后而不是之前设置绑定值。翻转顺序,您应该可以:

PreparedStatement ps = cnx.getConnection().prepareStatement(req);
ps.setInt(1,id);
ResultSet rs = ps.executeQuery();

在设置PreparedStatement的参数之前执行查询。这就是您的代码给出异常的原因。声明的顺序应为

ps.setInt(1,id); 
ResultSet rs= ps.executeQuery();

谢谢大家睡眠不足的问题:)