Как вставить выбранные несколько значений флажков в базу данных сервера SQL, используя подготовленный оператор? - PullRequest
0 голосов
/ 22 октября 2018
<html>
<head>
<title>Welcome</title>
</head>
<body>
<form  action="First_prgm" method="post">  
 <table>
<tr>
 <td> <b>3)Not including yourself, how many adults and children live in the same home as you on a permanent basis?</b></td>
<td><input type="checkbox" name="children" value="adults"> Adults (aged 18 and over) <br>
<input type="checkbox" name="children" value="0-4 years">Children-aged 0-4 years / house mates <br>
<input type="checkbox" name="children" value="5-8 years">Children-aged 5-8 years <br>
<input type="checkbox" name="children" value="9-11 years"> Children-aged 9-11 years <br>
<input type="checkbox" name="children" value="12-15 years"> Children-aged 12-15 years <br>
<input type="checkbox" name="children" value="16-17 years">Children-aged 16-17 years<br><br></td>
</tr>
</table>
</body>

First_prgm.java:

public  class First_prgm extends HttpServlet {

public void doPost(HttpServletRequest request,HttpServletResponse response)
                throws IOException {
            response.setContentType("text/html");
            PrintWriter out = response.getWriter();
            String insertTableSQL = "INSERT INTO MembersQnariesData"
                    + "(MemberID,FirstName,LastName,AgrGroup,AgeBrackets,LivingArrangement,DateOfBirth) VALUES"
                    + "(?,?,?,?,?,?,?)";


            int id = Integer.parseInt(request.getParameter("mid"));
            String fname = request.getParameter("first");
            String lname=request.getParameter("last");
            String a[] =request.getParameterValues("children");
            String age_brackets = request.getParameter("age");
            String living_arngmt  = request.getParameter("member");


           String dob = request.getParameter("DOB");




            try {

                  Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                Connection con = DriverManager.getConnection("jdbc:sqlserver://server;databaseName","username","password");

                PreparedStatement ps = con
                        .prepareStatement(insertTableSQL);

                ps.setInt(1,id);
                ps.setString(2,fname);
                ps.setString(3,lname);
                for(int j=0; j <a.length; j++){
                     ps.setString(4,a[j]);
                     out.println("selected values are"+a[j]);
                     }
                 ps.setString(5,age_brackets);
                 ps.setString(6, living_arngmt);
                 ps.setString(7,dob);

                int i = ps.executeUpdate();
                if(i>0){
                   out.println(i+ "row inserted");
                }        
            }
            catch (Exception e2) {
                e2.printStackTrace();
            }

            out.close();
        }

Может ли кто-нибудь помочь мне в этом. Я новичок. Я создал одно веб-приложение с флажками.Когда пользователь выбирает значения, последнее значение вставляется в базу данных. Мне нужно вставить выбранные значения в разные столбцы базы данных. Как это сделать

Большое спасибо.

1 Ответ

0 голосов
/ 23 октября 2018

Этот код ниже - проблема,

for(int j=0; j <a.length; j++){
                     ps.setString(4,a[j]);
                     out.println("selected values are"+a[j]);
  }

вы установили значение счетчика на - 4, и поэтому вы получаете только последнее значение.

Поскольку вы заранее не знаете количество флажков, вам необходимо динамически построить запрос, используя StringBuilder и в конце добавить к запросу a.length вопросительные знаки.

Затем при установке значений в PreparedStatement необходимо взять int counter и увеличить его после значения настройки.

ps.setInt(1,id);
            ps.setString(2,fname);
            ps.setString(3,lname);
             ps.setString(4,age_brackets);
             ps.setString(5, living_arngmt);
             ps.setString(6,dob);
int counter = 7; //since six question marks are already added for other fields
for(int j=0; j <a.length; j++){
                         ps.setString(counter++,a[j]);
                         out.println("selected values at index : "+j+" is : "+a[j]);
      }

или вы можете инициализировать counter = 1 и начинать с начала, как,

int counter = 1;
ps.setInt(counter++,id);
                ps.setString(counter++,fname);
                ps.setString(counter++,lname);
                 ps.setString(counter++,age_brackets);
                 ps.setString(counter++, living_arngmt);
                 ps.setString(counter++,dob);
    ; //since six question marks are already added for other fields
    for(int j=0; j <a.length; j++){
                             ps.setString(counter++,a[j]);
                             out.println("selected values at index : "+j+" is : "+a[j]);
          }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...