#java #sql #json #postgresql #jdbc
#java #sql #json #postgresql #jdbc
Вопрос:
хорошо, я новичок. У меня есть два ArrayList, и я хочу вставить данные из arralylist в таблицу. один arraylist предназначен для вставки параметров таблицы, а другой arraylist — для вставки значений таблицы.
Я попытался выполнить поиск, был ли динамический способ вставки, но не смог найти ни одного.
ArrayList<String> list= new ArrayList<>();
ArrayList<String> values= new ArrayList<>();
list.add("userid");
list.add("name");
list.add("email");
values.add(userID);
values.add(name);
values.add(email);
String sql = "insert into users (" list ") values( " values ")";
stmt.executeUpdate(sql);
Я хочу вставить данные в таблицу. но такие параметры, как userid, должны быть в «(кавычки), а имя должно быть в «(кавычки). но они не преобразуются автоматически. есть ли другой способ выполнить ту же задачу?
Есть ли какой-либо способ получить данные из JSON и вставить в таблицы локально?
Ответ №1:
Вы не должны не объединять подобные значения в строку SQL. Используйте PreparedStatement
вместо:
String sql = "insert into users (userid, name, email) values (?,?,?)";
PreparedStatement pstmt = connection.prepareStatement(sql);
Предпочтительным способом вставки нескольких строк является использование пакетной обработки
for (int i=0; i < values.size(); i ) {
pstmt.setString(i 1, values.get(i);
}
pstmt.executeUpdate();
Передача значения для имени столбца userid
в виде строки кажется неправильной с самого начала. Обычно они хранятся в виде целых чисел.
Ответ №2:
Вы можете использовать String.join
метод для составления запроса:
String sql = "insert into users (" String.join(", ", list) ") values( '" String.join("', '", values) "')";
Но такая ручная компиляция sql из необработанных String
s опасна и может быть уязвима для инъекционных атак. Я предлагаю использовать другие решения, такие как orm.
Комментарии:
1. как насчет целых чисел? целые числа там не будут работать? как обрабатывать целочисленные данные?
2. Я думал, что все они были
String
s. Нет, дляInteger
s это не сработает. Как уже было сказано, это не способ сделать это.