Вставка данных из arraylist в таблицы

#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 это не сработает. Как уже было сказано, это не способ сделать это.