SQLsever数据库问题:com.microsoft.sqlserver.jdbc.SQLServerException: 索引 1 超出范围
来源:互联网 发布:强矩阵组织 编辑:程序博客网 时间:2024/04/28 06:21
在用java封装sqlsever数据库的时候,遇到了一个很奇怪的问题
主要还是在防止SQL注入的部分代码上:
package dbsqlsever;import java.sql.*;public class SQLinject{static void read(String name) throws SQLException{Connection conn = null; //Statement stmt = null; PreparedStatement ps = null; //会对sql语句进行预处理ResultSet rs = null; try { //建立连接 conn = DB_init.getConnection(); //创建语句 //stmt = conn.createStatement(); String sql = "select num,name,age from studentinfo where convert(nvarchar(255),name) = ?"; ps = conn.prepareStatement(sql); ps.setString(1, name); //执行语句 rs = ps.executeQuery(); //输出结果 while(rs.next()) { System.out.println(rs.getObject("num")+"\t" +rs.getObject("name")+"\t" +rs.getObject("age")); } }finally {DB_init.free(rs,ps,conn);}}public static void main(String[] args) throws SQLException{// TODO 自动生成的方法存根read("a");}}
在用ps.setString(1, name);函数时,两个参数,运行之后却会显示
Exception in thread "main" com.microsoft.sqlserver.jdbc.SQLServerException: 索引 1 超出范围。at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:191)at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setterGetParam(SQLServerPreparedStatement.java:933)at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setValue(SQLServerPreparedStatement.java:948)at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setString(SQLServerPreparedStatement.java:1578)at dbsqlsever.SQLinject.read(SQLinject.java:26)at dbsqlsever.SQLinject.main(SQLinject.java:48)
com.microsoft.sqlserver.jdbc.SQLServerException: 索引 1 超出范围。
说明:也可能是索引2 or 3 ...超出范围。
原因:存储过程中的变量定义顺序和在java代码中调用时的变量赋值顺序有问题。
检查一下你的sql语句,1)看一下你的sql语句中的?号是中文还是英文
2)看一下你的sql语句中?号的个数是否与你传入的参数的个数刚好相等
3 ) 使用Dao包时:
param=null;
rs=dao.query(sql, param);会出现以上错误,因为你的sql语句中没有?号,所以不需要添加param, 即使param为空。
改成 rs=dao.query(sql);即可。
? 一定要是在英文输入法情况下输入
阅读全文
0 0
- SQLsever数据库问题:com.microsoft.sqlserver.jdbc.SQLServerException: 索引 1 超出范围
- com.microsoft.sqlserver.SQLServerException:索引1超出范围
- com.microsoft.sqlserver.SQLServerException:索引1超出范围
- Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 索引 1 超出范围
- com.microsoft.sqlserver.jdbc.SQLServerException
- com.microsoft.sqlserver.jdbc.SQLServerException: socket closed
- jdbc连接数据库失败:com.microsoft.sqlserver.jdbc.SQLServerException: 到主机 的 TCP/IP 连接失败。
- jdbc连接数据库失败,com.microsoft.sqlserver.jdbc.SQLServerException: 到主机 的 TCP/IP 连接失败。
- com.microsoft.sqlserver.jdbc.SQLServerException 将截断字符串或二进制数据问题
- 解决插入语句问题:com.microsoft.sqlserver.jdbc.SQLServerException: 该语句没有返回结果集
- com.microsoft.sqlserver.jdbc.SQLServerException: 对象名 ‘xxx' 无效
- JSP com.microsoft.sqlserver.jdbc.SQLServerException: '@P0' 附近有语法错误。
- com.microsoft.sqlserver.jdbc.SQLServerException: 对象名 ‘xxx' 无效
- com.microsoft.sqlserver.jdbc.SQLServerException:对象名 ‘xx’ 无效
- com.microsoft.sqlserver.jdbc.SQLServerException: 结果集已关闭
- com.microsoft.sqlserver.jdbc.SQLServerException: 结果集已关闭
- java com.microsoft.sqlserver.jdbc.SQLServerException: 该连接已关闭。
- com.microsoft.sqlserver.jdbc.SQLServerException: 该连接已关闭
- 第九周LeetCode
- 坑堆
- 周有光去世
- MySQL几点重要的性能指标计算和优化
- JSP内置对象
- SQLsever数据库问题:com.microsoft.sqlserver.jdbc.SQLServerException: 索引 1 超出范围
- 打正式包的时候跳过错误检查
- c#语言笔记-2
- Wannafly模拟赛5 DAria
- /usr/bin/X11 各个程序中文详解
- 【python】Request模块
- Java使用谷歌的zxing生成二维码Qrcode并解析提取二维码图片内容
- oracle ORA-12560: TNS: 协议适配器错误
- 我的博客列表