Преобразование request.getParameterValues ​​() в массив int

Я пытался найти помощь в Интернете, чтобы решить мою проблему, но безрезультатно. Я хочу конвертировать verify[] в int, так что это может быть обработано в запросе.

verified столбец имеет тип данных string

staff_id столбец имеет тип данных autonumber

Я получаю ошибку

java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Несоответствие типов данных в выражении критериев.

VerifyStaff.jsp

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Verification of Staff Accounts</title>
</head>
<body>
<div align="center">
        <%-- Imports --%>
        <%@ page import="java.sql.*"%>
        <%@ page import="java.util.*"%>
        <%-- HTTP header --%>
        <%response.addHeader("Cache-Control","no-cache");
            response.addHeader("Pragma","no-cache");
                response.addHeader("Expires","0");  
        %>
        <%-- Retrieving Staff Accounts - Reading --%>
        <%
        try{
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        String conURL= "jdbc:odbc:HOD_DATA";
        Connection con = DriverManager.getConnection(conURL);
        Statement st = con.createStatement();
        String query = "select staff_id, username, password, user_group, verified from Staff";
        ResultSet rs = st.executeQuery(query);
    %>
        <form action="VerifyStaffAuth.jsp">
                <table width="200" border="1">
                        <tr>
                                <td>Staff_ID</td>
                                <td>Username</td>
                                <td>Password</td>
                                <td>User Group</td>
                                <td>Verified?</td>
                                <td>Verify/Un-verify</td>
                        </tr>
                        <%
        while(rs.next()){
            int staff = rs.getInt("staff_id");
%>
                        <tr>
                                <td><%= staff %></td>
                                <td><%= rs.getString("username") %></td>
                                <td><%= rs.getString("password") %></td>
                                <td><%= rs.getString("user_group") %></td>
                                <td><%= rs.getString("verified") %></td>
                                <td><label>
                                                <input type="checkbox" name="CheckboxGroup" value="<%= staff %>">
                                        </label></td>
                        </tr>
                        <%
        }
        rs.close();
        st.close();
        con.close();
        }

        catch(Exception e){
        out.println(e);
        }

        %>
                </table>
                <input type="submit" VALUE="submit">
        </form>
</div>
</body>
</html>

VerifyStaffAuth.jsp

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title></title>
</head>
<body>
<%-- Imports --%>
<%@ page import="java.sql.*"%>
<%@ page import="java.util.*"%>
<%-- HTTP header --%>
<%response.addHeader("Cache-Control","no-cache");
            response.addHeader("Pragma","no-cache");
                response.addHeader("Expires","0");  %>

<%  String[] verify = request.getParameterValues("CheckboxGroup");

            int[] verify2 = new int[verify.length];

            for(int i=0;i<verify.length;i++){
                verify2[i]=Integer.parseInt(verify[i]);
            }

        if(verify != null){
            for(int i=0; i<verify.length; i++){

    try{
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            String conURL= "jdbc:odbc:HOD_DATA";
            Connection con = DriverManager.getConnection(conURL);
            Statement st = con.createStatement();
            int status = st.executeUpdate("update Staff set verified = 'yes' where Staff_id = '"+verify[i]+"'");

            if(status>0){
                //response.sendRedirect("SuccessfulReg1.html");

            }
            else{
                //out.println("Update unsuccessful");
            }

            st.close();
            con.close();
            }

            catch(Exception e){
            out.println(e);
            }
        }
        }
        %>
</body>
</html>

1 ответ

Решение

Измени свой UPDATE запрос к

st.executeUpdate("update Staff set verified = 'yes' where Staff_id = " + verify[i]);

Поскольку, staff_id столбец имеет тип данных autonumber его значение не должно указываться в кавычках, поскольку оно по своей природе числовое.

Я бы также предложил вам использовать SQL IN пункт и уволить только один UPDATE вместо того, чтобы запустить его несколько раз, по одному для каждого staff_id значение.


Ваш UPDATE запрос с IN пункт должен выглядеть примерно так

UPDATE staff SET verified = 'yes' WHERE staff_id IN (1, 2, 3)

использование Arrays.toString() чтобы получить строку через запятую как

String inValues = Arrays.toString(verify); // "[1, 2, 3]"
inValues = inValues.substring(1, inValues.length() - 1)); // "1, 2, 3"
Другие вопросы по тегам