当前位置:编程学习 > JAVA >>

索引2超出范围的问题(Sqlserver中)

package com;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
//数据库操作工具类
public class DBUtil
{
//数据库连接URL
//private static final String url="jdbc:mysql://localhost:3306/test";
private static final String url="jdbc:sqlserver://localhost:1433;DatabaseName=javaweb";
//数据库用户名
private static final String username="sa";
//数据库密码
private static final String password="123456";
static{
try{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//加载驱动类
}catch(ClassNotFoundException e){
e.printStackTrace();
}
}
//返回数据库连接
public static Connection getConn(){
Connection conn = null;
try{
//通过驱动管理器获取数据库连接
conn = DriverManager.getConnection(url,username,password);
System.out.println("连接数据库成功!");
}catch(SQLException e){
e.printStackTrace();
}
return conn;
}
//执行数据库查询SQL
public static int executeUpdate(Connection conn,String sql,Object[] params){
int rst = -1;
try{
conn.setAutoCommit(false);
//创建会话
PreparedStatement pstmt = conn.prepareStatement(sql);
//循环设置参数

for(int i=0;i<params.length;i++){
pstmt.setObject(i+1,params[i]);
}

rst = pstmt.executeUpdate();
conn.commit();
}catch(SQLException e){
e.printStackTrace();
try{
conn.rollback();
}catch(SQLException e1){
e1.printStackTrace();
}
}
System.out.println("executeUpdate执行成功");
return rst;//返回结果
}

//执行数据库查询SQL
public static ResultSet executeQuery(Connection conn,String sql){//list.jsp要用到的方法
ResultSet rs = null;
try{
//创建会话
PreparedStatement pstmt = conn.prepareStatement(sql);
//循环设置参数
/*
for(int i=0;i<params.length;i++){
pstmt.setObject(i+1,params[i]);
}
*/
rs = pstmt.executeQuery();//执行数据库查询操作

}catch(SQLException e){
e.printStackTrace();
}
System.out.println("executeQuery执行成功返回结果集(无条件查询)");
return rs;//返回结果
}
//执行数据库查询SQL
public static ResultSet executeQuery(Connection conn,String sql,Object[] params){
ResultSet rs = null;
try{
//创建会话
PreparedStatement pstmt = conn.prepareStatement(sql);
//循环设置参数

for(int i=0;i<params.length;i++){
pstmt.setObject(i+1,params[i]);
}

rs = pstmt.executeQuery();//执行数据库查询操作

}catch(SQLException e){
e.printStackTrace();
}
System.out.println("executeQuery执行成功返回结果集(有条件查询)");
return rs;//返回结果
}

//关闭结果集,会话和连接
public static void close(Connection conn,Statement stmt,ResultSet rs){
if(null != rs){
try{
rs.close();
}catch(SQLException e){
e.printStackTrace();
}
}
if(null != stmt){
try{
stmt.close();
}catch(SQLException e){
e.printStackTrace();
}
}
if(null != conn){
try{
conn.close();
}catch(SQLException e){
e.printStackTrace();
}
}
System.out.println("成功关闭数据库连接");
}
} --------------------编程问答-------------------- 什么问题,就贴一段代码! --------------------编程问答-------------------- 这是一个servlet调用哪个DBUtil的代码,中间不同颜色的两行是我修改的部分
其中第二行红色的是我后来添加的,其实这在mysql上我测试的时候没有发现他的问题
现在我专门把需要传给两个sql语句的参数分别用两个Object数组存放,这样就没问题了
package com;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;



//添加用户的Servlet
public class AddUserServlet extends HttpServlet{

public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
this.doPost(request,response);
//与doPost操作相同
}
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
response.setContentType("text/html;charset=gb2312");
request.setCharacterEncoding("gb2312");
String username = new String(request.getParameter("username").getBytes("iso8859_1"),"gb2312");
String password = request.getParameter("password");
String gender = request.getParameter("gender");
String msg = "";//定义返回的字符串
Object[] params = new Object[3];
Object[] params1 = new Object[1];
  params1[0] = username;
if(null == username || "".equals(username)){
msg = "请输入用户名";
}else if (null == password || "".equals(password) ){
msg = "请输入用户名";
}else{
Connection conn = null;
ResultSet rs = null;

try{
String sql = "select * from users where username=?";
conn = DBUtil.getConn();
rs = DBUtil.executeQuery(conn,sql,params1);
if(rs.next()){
msg = "用户名已经存在";
}else{
//定义sql插入记录语句
sql = "insert into users(username,password,gender) values(?,?,?)";
//执行sql插入操作
params[0] = username;
params[1] = password;
params[2] = gender;
int rst = DBUtil.executeUpdate(conn,sql,params);
if(rst > 0){
msg = "添加用户成功";
}else{
msg = "添加用户失败,请检查数据库";
}
}
}catch (SQLException e){
e.printStackTrace();
msg = "数据库操作异常";
}finally{
DBUtil.close(conn,null,rs);
}
}
//设置返回文档类型
response.setContentType("text/html;charset=gb2312");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<html>");
out.println("<head><title>A Servlet</title></head>");
out.println("<body>");
out.println(msg + "<a href=\"list.jsp\">返回</a>");
out.println("</body>");
out.println("</html>");
out.flush();
out.close();
}
}
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,