servlet mysql运行时异常

时间:2015-05-09 02:31:15

标签: java mysql servlets

  

java.sql.SQLException:参数索引超出范围(1>参数个数,   这是0)

对于以下代码,需要进行哪种参数更改才能运行代码?

package com.chen.util;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

public class SqlHelper {
    private static Connection conn = null;
    private static PreparedStatement ps = null;
    private static ResultSet rs = null;

    private static String url = "jdbc:mysql://localhost:3306/userdata";
    private static String username1 = "root";
    private static String password1 = "root";

    static {
        try {

            Class.forName("com.mysql.jdbc.Driver");

        } catch (Exception e) {
            e.printStackTrace();
        } finally {

        }
    }


    public static Connection getConnection() {
        try {
            conn = DriverManager.getConnection(url, username1, password1);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }



        public static void executeUpdate(String sql, String[] parameters) {

        try {
            conn = getConnection();
            ps = conn.prepareStatement(sql);

            if (parameters != null) {
                for (int i = 0; i < parameters.length; i++) {
                    ps.setString(i+1 , parameters[i]);
                }
            }

            ps.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();

            throw new RuntimeException(e.getMessage());
        } finally {
            close(rs,ps,conn);
        }
    }

    public static ResultSet executeQuery(String sql,String[]parameters){
        try{
            conn=getConnection();
            ps=conn.prepareStatement(sql);
            if(parameters!=null&&!parameters.equals("")){
                for(int i=0;i<parameters.length;i++){
                    ps.setString(i+1,parameters[i]);
                }
            }
            rs=ps.executeQuery();
        }catch(Exception e){
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        }finally{
            //close(rs,ps,conn);
        }
        return rs;
    }

        public static void close(ResultSet rs, PreparedStatement ps, Connection    conn) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {

                e.printStackTrace();
            }
            rs = null;
        }
        if (ps != null) {
            try {
                ps.close();
            } catch (SQLException e) {

                e.printStackTrace();
            }
            ps = null;
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {

                e.printStackTrace();
            }
            conn = null;
        }
    }

    public static Connection getConn() {
        return conn;
    }

    public static PreparedStatement getPs() {
        return ps;
    }

    public static ResultSet getRs() {
        return rs;
    }
}

下面是错误堆栈:

//java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1062)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:973)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:959)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:904)
    at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3797)
    at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3779)
    at com.mysql.jdbc.PreparedStatement.setString(PreparedStatement.java:4600)
    at com.chen.util.SqlHelper.executeQuery(SqlHelper.java:100)
    at com.chen.services.UserService.checkUser(UserService.java:22)
    at com.chen.controller.ControllerServlet.doGet(ControllerServlet.java:33)
    at 

package com.chen.services;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import com.chen.domain.User;
import com.chen.util.SqlHelper;

public class UserService {

// 用checkUser()来判断用户是否存在

public boolean checkUser(User user) {
    boolean b = false;
    // 使用SqlHelper来完成查询任务
    String sql = "select * from user where username=? and password=?";
    String parameters[] = { user.getUsername(), user.getPassowrd() };
    ResultSet rs = SqlHelper.executeQuery("sql", parameters);
    // 根据rs来判断该用户是否存在
    try {
        if (rs.next()) {
            b = true;
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        SqlHelper.close(rs, SqlHelper.getPs(), SqlHelper.getConn());
    }
    return b;
}

public ArrayList getUserByPage(int pageNow, int pageSize) {
    ArrayList<User> arr = new ArrayList<User>();
    // 查询sql
    //String sql = "select * from user where id>3 order by id limit 20";
    String sql="select sql_calc_found_rows * from user limit 0,10";
    ResultSet rs = SqlHelper.executeQuery(sql, null);
    // 二次封装 把 ResultSet -->User对象-->Arraylist(集合)
    try {
        while (rs.next()) {
            User u = new User();
            try {
                u.setId(rs.getInt(1));
                u.setUsername(rs.getString(2));
                u.setPassowrd(rs.getString(3));
                // 一定记住 u-->ArrayList
                arr.add(u);
            } catch (SQLException e) {

                e.printStackTrace();
            }

        }
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } finally {
        SqlHelper.close(rs, SqlHelper.getPs(), SqlHelper.getConn());
    }
    return arr;
}

public int getPageCount(int pageSize) {
    String sql = "select * from user";
    int rowCount = 0;
    ResultSet rs = SqlHelper.executeQuery(sql, null);
    try {
        rs.next();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    try {
        rowCount = rs.getInt(1);
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } finally {
        SqlHelper.close(rs, SqlHelper.getPs(), SqlHelper.getConn());
    }
    return (rowCount - 1) / pageSize + 1;
}
//删除用户
public boolean deleUser(String id){
    boolean b=true;
    String sql="delete from user where id=?";
    String parameters[]={id};;
    try {
        SqlHelper.executeUpdate(sql, parameters);

    } catch (Exception e) {
        b=false;
    }
    return b;
}
//用过id获取用户数据
public User getUserById(String id){
    User user=new User();
    String sql="select * from user where id= ?";
    String parameters[]={id};
    ResultSet rs=SqlHelper.executeQuery(sql, parameters);
    try {
        if(rs.next()){
            user.setId(rs.getInt(1));
            user.setUsername(rs.getString(2));
            user.setPassowrd(rs.getString(3));

        }
    } catch (SQLException e) {

        e.printStackTrace();
    }finally{
        SqlHelper.close(rs, SqlHelper.getPs(), SqlHelper.getConn());
    }
    return user;
}
//修改用户
public boolean updateUser(User user){
    boolean b=true;
    String sql="update user set username=?,password=? where id=?";
    String parameters[]={user.getUsername(),user.getPassowrd(),user.getId()+""};
    try {
        SqlHelper.executeUpdate(sql, parameters);
    } catch (Exception e) {
        b=false;
    }
    return b;
}

}

1 个答案:

答案 0 :(得分:0)

替换它:

ResultSet rs = SqlHelper.executeQuery(sql, parameters);

使用:

mylist = list(set(mylist))