Динамическая переменная в executeUpdate (Java) - PullRequest
0 голосов
/ 08 октября 2018

У меня есть следующие connection, statement и executeUpdate

Connection con = DBConnPool.getInstance().getConnection();
Statement stmt = con.createStatement();

//String str1 = "update node set compareflag=0, personalid=NULL where ipaddress='192.168.150.213'";

String str1 = "update node set compareflag=0, personalid=NULL where ipaddress='var3.getIpAddress()'";
                            stmt.executeUpdate(str1);

Комментированная строка String работает отлично, другая игнорирует значение, возвращаемое var3.getIpAddress(), хотяэта переменная содержит правильные данные, которые я использую в других областях моего кода.

Должен ли я сначала создать отдельную переменную, а затем приравнять ее к var3.getIpAddress()?

Любые мысли приветствуются, это, вероятно, недостаточно "или" в неправильном месте.

Ответы [ 2 ]

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

Предпочитайте PreparedStatement с параметром связывания.Динамическое построение запроса делает вас уязвимыми для SQL-инъекций атак.PreparedStatement (при правильном использовании) является невосприимчивым к SQL-инъекции.Это также облегчает чтение и анализ кода.Например,

Connection con = DBConnPool.getInstance().getConnection();
String qry = "update node set compareflag=0, personalid=NULL where ipaddress=?";
PreparedStatement stmt = con.prepareStatement(qry);
stmt.setString(1, var3.getIpAddress());
stmt.executeUpdate();
0 голосов
/ 08 октября 2018

Вы должны использовать PreparedStatement , чтобы установить параметр для сейфа.

PreparedStatement pstmt = con.prepareStatement("update node set compareflag=0, personalid=NULL where ipaddress=?");
pstmt.setString(1,var3.getIpAddress());
pstmt.executeUpdate();
...