0

所有,我有一个数组列表,我想一个一个地取值并将它们放在字符串生成器中。

我尝试了几个步骤,例如循环 for 和 foreach

这是我的代码:

       try{
          Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/"+jComboBox1.getSelectedItem()+"","root","");
          Statement stmt=con.createStatement();


         for(int i =0; i < box.size();i++){
             if(box.get(i).isSelected()){
                 //System.out.print(box.get(i).getText().trim());
                 ResultSet rs=stmt.executeQuery("select "+box.get(i).getText().trim()+" from "+jComboBox3.getSelectedItem()+";");
                 while(rs.next()){
                    isikolom = rs.getString(1);
                    isi.add(isikolom);

                    String getkey = jTextField1.getText().toString();
                    byte[] key = getkey.getBytes();
                    RC4 rc = new RC4(new String(key));

                    byte[] desText = rc.decrypt(enText);
                    descrypted = new String(desText);
                    StringBuilder sb2 = new StringBuilder(128);
                    sb2.append("UPDATE ").append(jComboBox3.getSelectedItem().toString()).append(" SET ");
                    sb2.append(box.get(i).getText().toString()+" = ").append("REPLACE ").append("("+box.get(i).getText().toString()+",");
                    sb2.append("'"+isikolom+"'").append(",");

                    isideskripsi.stream().forEach(isideskripsi -> {
                        sb2.append("'"+isideskripsi+"'");
                            });
                    sb2.append(")");
                    String query2 = sb2.toString();
                    System.out.println(query2);
                    PreparedStatement presatet2 = con.prepareStatement(query2);
                   // presatet2.executeUpdate();

                 }

                 System.out.println("After Encryption : "+isiencrypsi);
                 System.out.println("After Descryption : "+isideskripsi);

        }
     }
        end = System.currentTimeMillis();
        long time = end - start;
        JOptionPane.showMessageDialog(null, "Berhasil Deskripsi Dalam Waktu "+time+" Detik");


    }catch(Exception e){
        JOptionPane.showMessageDialog(null, "Gagal Deskripsi, Error Pada : "+e);
        System.out.print(e);
    }

arraylist 项目是 [admin, pegawai, penyidik]

这是该代码的结果:

UPDATE user SET username = REPLACE (username,'X"mBR','admin''pegawai''penyidik')

UPDATE user SET username = REPLACE (username,'I#gJK','admin''pegawai''penyidik')

UPDATE user SET username = REPLACE (username,' I#nRU� �','admin''pegawai''penyidik')

我预期的结果:

UPDATE user SET username = REPLACE (username,'X"mBR','admin')

UPDATE user SET username = REPLACE (username,'I#gJK','pegawai')

UPDATE user SET username = REPLACE (username,' I#nRU� �','penyidik')

4

2 回答 2

1

由于您的描述不清楚,我不确定您要执行的操作如下:

int idx = 0;
while(rs.next()) {
    ...
    sb2.append("'"+isikolom+"'").append(",");
    /* remove this block
    isideskripsi.stream().forEach(isideskripsi -> {
                    sb2.append("'"+isideskripsi+"'");
                        });
    */
    sb2.append("'").append(isideskripsi.get(idx)).append("'");
    sb2.append(")");
    idx++;
    ...
}
于 2019-10-29T13:45:29.553 回答
0
isideskripsi.stream().forEach(isideskripsi -> {
sb2.append("'"+isideskripsi+"'");
                        });

上面的代码问题,因为每次构建 SQL 时,都会输出 arraylist 中的所有项目,而不是应该:

sb2.append("'"+isideskripsi.get(i-1)+"'");

因为你只想要每一个数组列表项一次

于 2019-10-29T06:41:04.680 回答