问题描述
com.microsoft.sqlserver.jdbc.SQLServerException:索引2超出范围。用户名:user密码:123456atcom.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190)atcom.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setterGetParam(SQLServerPreparedStatement.java:714)atcom.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setValue(SQLServerPreparedStatement.java:723)atcom.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setString(SQLServerPreparedStatement.java:1048)atdb.SqlHelper.query(SqlHelper.java:38)atDao.UserMode.checkUser(UserMode.java:26)atDao.Index.actionPerformed(Index.java:87)代码如下-1:packageDao;importjava.awt.EventQueue;publicclassIndexextendsJFrameimplementsActionListener{privateJPanelcontentPane;privateJTextFieldtextName;privateJLabellabel;privateJTextFieldtextPsw;privateJButtonbtnNewButton;*Launchtheapplication.publicstaticvoidmain(String[]args){/***Createtheframe.*/publicIndex(){@Override//响应用户请求。publicvoidactionPerformed(ActionEvente){Objectobe=e.getSource();//判断是否点击登录按钮if(obe.equals(btnNewButton)){//取出用户名密码Stringu=this.textName.getText();Stringp=this.textPsw.getText();UserModeum=newUserMode();Stringres=um.checkUser(u,p);System.out.println("用户名:"+u+"密码:"+p);}}}代码如下-2:packageDao;importjava.sql.ResultSet;importdb.SqlHelper;/***用户对数据库的操作***/publicclassUserMode{/****@paramLoginId用户编号*@paramLoginPWD用户密码*@return*/publicStringcheckUser(StringLoginId,StringLoginPWD){SqlHelpersp=null;try{//组织sql,和参数列表Stringsql="select?fromUserswhereLoginIdaddLoginPWD";Stringparas[]={LoginId,LoginPWD};sp=newSqlHelper();ResultSetts=sp.query(sql,paras);}catch(Exceptione){//TODO:handleexception}finally{sp.close();}returnnull;}}代码如下-3:/***对数据库操作的类*对数据库的操作*调用存储过程主要写项目业务操作*/packagedb;importjava.sql.*;publicclassSqlHelper{//定义需要的对象PreparedStatementps=null;ResultSetrs=null;Connectionct=null;//应为多次引用故写出来StringdirverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";Stringurl="jdbc:sqlserver://127.0.0.1:1433;dataabaseName=MyBookShop";Stringuser="jiashao";Stringpasswd="admin";//构造函数,初始化ctpublicSqlHelper(){try{//加载驱动Class.forName(dirverName);//2.创建连接ct=DriverManager.getConnection(url,user,passwd);}catch(Exceptione){e.printStackTrace();//防止程序出错,来报错提示//TODO:handleexception}}publicResultSetquery(Stringsql,String[]paras){//数据结果都可以通过这方法得到结果try{ps=ct.prepareStatement(sql);//对sql的参数赋值for(inti=0;i<paras.length;i++){ps.setString(i+1,paras[i]);}rs=ps.executeQuery();}catch(Exceptione){e.printStackTrace();//TODO:handleexception}returnrs;}//关闭资源的方法publicvoidclose(){try{if(rs!=null)rs.close();if(ps!=null)ps.close();if(ct!=null)ct.close();{}}catch(Exceptione){e.printStackTrace();//TODO:handleexception}}}
解决方案
解决方案二:
楼主,通过debug打一下断点,跟一下代码,哪行代码出问题的,就仔细分析下上下文的变量值,应该可以得出一些结果。
解决方案三:
这年头还有人用java的swing来做界面的
解决方案四:
引用2楼secondfirstlife的回复:
这年头还有人用java的swing来做界面的
那对于新手你有什么好的建议没?
解决方案五:
引用1楼magi1201的回复:
楼主,通过debug打一下断点,跟一下代码,哪行代码出问题的,就仔细分析下上下文的变量值,应该可以得出一些结果。
这个我还真没用过debug听他们说是sql语句错了
解决方案六:
Stringsql="select?fromUserswhereLoginIdaddLoginPWD";Stringparas[]={LoginId,LoginPWD};只有一个问号,传2个参数。你是不是少一个问号
解决方案七:
select?fromUserswhereLoginIdaddLoginPWD这个where后面什么意思怎么这么写。LoginIdaddLoginPWD