java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Invalid parameter binding(s).错误

z184931481 2007-06-13 11:55:32
环境:TOMCAT6.0+JDK
注册代码:
<%@ page contentType="text/html; charset=gb2312" %>
<%@ page language="java" import="java.sql.*"%>
<html>
<head>
<title>系统用户注册</title>
</head>
<%
final String DBDRIVER = "com.microsoft.jdbc.sqlserver.SQLServerDriver" ;
final String DBURL = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=myjob";

Connection conn = null ;
ResultSet rs = null ;
String name=null;
String password=null;
String user="sa";
String pass="";
String reg_name=request.getParameter("name");
String reg_pass=request.getParameter("password");
Statement st=null;
PreparedStatement stat=null;
boolean flag=true;
try
{
Class.forName(DBDRIVER) ;
conn = DriverManager.getConnection(DBURL,user,pass) ;
st=conn.createStatement();
rs = st.executeQuery("select * from user1") ;
while(rs.next())
{

if(reg_name.equals(rs.getString(1))){
out.println("<br><br><center><B>请重新注册</B></center>");
out.println("<script>alert('对不起,用户名"+reg_name+"已存在');location.replace('reg.jsp');</script>");
flag=false;
break;
}

}
if (flag){
stat=conn.prepareStatement("insert user1(user1.name,user1.pass) values('"+reg_name+"','"+reg_pass+"')");
stat.setString(1,reg_name);
stat.setString(2,reg_pass);
stat.executeUpdate();
out.println("<br><br><center><B>注册成功</B></center>");
out.println("<br><br><center>您的用户名是:"+reg_name+"</center>");
out.println("<br><center>您的密码是: "+reg_pass+"</center>");
stat.close();
String name_reged=null;
session.putValue("name_reged",reg_name);
out.println("<script>alert('谢谢注册,请登陆');location.replace('index.jsp')</script>");


}
rs.close() ;

conn.close() ;
}
catch(Exception e)
{
out.println(e);
}
%>
</html>
报错:
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Invalid parameter binding(s).

请大侠们帮忙解决,小弟先谢过了
...全文
2342 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
songfuqiang 2008-03-24
  • 打赏
  • 举报
回复
就是设置参数!
z184931481 2007-06-13
  • 打赏
  • 举报
回复
非常感谢
  • 打赏
  • 举报
回复
这就是使用 PreparedStatement 的结果,PreparedStatement 是预编译语句,先将sql语句编译,再填充参数值的,这样可以有效地防范SQL注入。

stat中不是有两个“?”吗。
stat.setString(1, reg_name); 即将第一个问号的值设为 reg_name,1表示第一个问号,setString表示第一个问号的值类型是字符型,还有很多啦,比如:setInt、setDate等,具体使用哪一个就要看问号所对应的类型。
z184931481 2007-06-13
  • 打赏
  • 举报
回复
谢谢问题已解决,stat.setString(1,reg_name);到底代表什么意思呢
  • 打赏
  • 举报
回复
因为你有:

stat.setString(1,reg_name);
stat.setString(2,reg_pass);

所以要把

stat=conn.prepareStatement("insert user1(user1.name,user1.pass) values('"+reg_name+"','"+reg_pass+"')");

改成

stat = conn.prepareStatement("insert user1(user1.name,user1.pass) values(?,?)");

否则它找不到匹配的参数。
内容概要:本文围绕水陆两栖无人机的任务规划与执行问题,提出了一种基于Matlab实现的智能路径规划解决方案,重点融合粒子群优化算法(PSO)与遗传算法(GA)进行三维环境下的避障路径规划。研究系统性地构建了从复杂地形建模、任务需求分析到算法设计与仿真实验的完整流程,实现了在多约束、动态障碍物等复杂环境下无人机的高效任务调度。通过对GA与PSO两种智能优化算法在路径长度、收敛速度、路径平滑度及稳定性等方面的对比分析,深入探讨了各自在无人机路径规划中的适用场景与性能差异,验证了所提方法在提升任务执行效率与安全性方面的有效性。该方案不仅适用于水陆交互通用场景,也为多模态无人系统自主导航提供了可扩展的技术框架。; 适合人群:具备一定Matlab编程能力和算法基础,从事无人机路径规划、智能优化算法研究、自动化控制或相关领域科研工作的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于水陆两栖无人机在复杂自然环境(如江河湖海与陆地交错区域)中的自主巡航与任务执行;②比较遗传算法与粒子群算法在三维动态路径规划中的优化性能,指导实际工程中算法选型;③为多约束条件下无人系统的自主决策与实时避障提供算法支持与仿真验证平台。; 阅读建议:建议读者结合提供的Matlab代码进行动手实践,重点关注两种算法的数学建模过程、适应度函数设计、参数调优策略及路径生成逻辑,通过仿真实验直观对比算法性能差异,深入理解智能优化算法在复杂路径规划问题中的应用机制与优化潜力。

81,111

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧