重複の可能性:
PreparedStatement IN 句の代替案?
チェックボックスの選択に基づいてMYSQLから選択したい。(チェックボックスには ID があり、データベースからの選択では ID= ? -> 選択された ID を選択する必要があります)
MVC アーキテクチャで整理します。
in jsp は私のフォームです(これは動的であるため、さらに多くの可能性があります)
<input type="checkbox" name="checkboxes" value="1">XY <input type="checkbox" name="checkboxes" value="2">XY <input type="checkbox" name="checkboxes" value="3">XY
サーブレットで値を取得します
String[] catids = request.getParameterValues("checkboxes"); //Forward to bean -> doesnt work because catids is like an array FrageBean f=FragenBean.getRandomQuestionByCategory(catids);
私の豆は:
public static FrageBean getRandomQuestionByCategory(String catids) { ArrayList<Integer> alleFragenIds = new ArrayList<Integer>(); DatabaseMetaData dbmd; Statement sql; Connection db = null; try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException ex) { System.out.println("driver not found"); } try { db = DriverManager .getConnection("jdbc:mysql://localhost:3306/xyz?" + "user=root&password=xyz"); dbmd = db.getMetaData(); System.out.println("Connected with: " + dbmd.getUserName() + " | " + "Connection to: " + dbmd.getDatabaseProductName() + " " + dbmd.getDatabaseProductVersion() + " successful.\n"); sql = db.createStatement(); } catch (SQLException ex) { System.out.println("Error: " + ex); } try { String query = "select id from quest where quest_id=?"; PreparedStatement prest = db.prepareStatement( query); prest.setString(1, catids); ResultSet rs = prest.executeQuery(); ArrayList fragenliste = new ArrayList(); while (rs.next()) { int fragenid = rs.getInt("id"); alleFragenIds.add(fragenid); } rs.close(); db.close(); } catch (SQLException ex) { System.out.println("Error: " + ex); } Random r = new Random(); int frageIndex = r.nextInt(alleFragenIds.size()); System.out.println("Contents of al: " + alleFragenIds); return new FrageBean(alleFragenIds.get(frageIndex)); }
現時点では、1 つの ID に対してのみ機能していました (選択肢が 1 つしかなかったため)。チェックボックスでそれを行うにはどうすればよいですか?「catids」を Bean に転送し、mysql-query ダイナミックを作成するにはどうすればよいですか? (kategorie_id= [ALL CHECKED BOXES] の fragen から ID を選択)
前もって感謝します!!!!