#java #mysql #insert #prepared-statement
#java #mysql #вставить #подготовленное утверждение
Вопрос:
Я хочу создать единый метод для выполнения вставок в разные таблицы, я хочу, чтобы пользователь вводил в качестве параметров имя таблицы и список данных, которые нужно вставить.
Что-то вроде этого:
public void insertar(String tabla, LinkedList data)
{
String alta = "insert into " tabla " values(";
for(int i = 0; i < datos.size(); i ) {
alta = alta "?,";
}
alta = alta.substring(0, alta.length() - 1) ")";
System.out.println(alta);
try
{
PreparedStatement insertar = con.prepareStatement(alta);
}
catch (SQLException ex)
{
}
}
Моя проблема в том, что я не могу понять, как установить значения, как только
Строка создается потому, что размер и тип данных могут меняться в зависимости от
таблица, которую я использую.
Есть ли способ сделать это?, или мне нужно сделать это по-другому?
Заранее спасибо!
Ответ №1:
Ваш связанный список, вероятно, должен содержать что-то другое, чем String
‘s. Рассматривали ли вы возможность создания типа Binding
класса, который знает, как устанавливать значения в вашем PreparedStatement? Я предполагаю что-то вроде этого:
public abstract class Binding {
public abstract void bind(PreparedStatement ps) throws SQLException;
}
public class IntegerBinding extends Binding {
private int value;
private int index;
public IntegerBinding(int _index, int _value) {
index = _index;
value = _value;
}
public void bind(PreparedStatement ps) throws SQLException {
ps.setInt(index, value);
}
}
Вы можете использовать значение, которое вы пытаетесь применить к PreparedStatement
и индекс в PreparedStatement
, чтобы создать свою конкретную Binding
реализацию. Конечно, вам нужно было бы написать свои собственные Binding
подклассы, чтобы охватить другие типы данных, которые вы заинтересованы в использовании.
Вот небольшая модификация вашего кода, чтобы иметь возможность использовать идеи, изложенные выше:
public void insertar(String tabla, List<Binding> bindings)
{
String alta = "insert into " tabla " values(";
for(int i = 0; i < datos.size(); i ) {
alta = alta "?,";
}
alta = alta.substring(0, alta.length() - 1) ")";
System.out.println(alta);
try
{
PreparedStatement insertar = con.prepareStatement(alta);
for(Binding binding : bindings)
{
binding.bind(insertar);
}
insertar.execute();
}
catch (SQLException ex)
{
}
}
Я думаю, что это довольно удобное решение, и я надеюсь, что оно вам поможет. Удачи!
Комментарии:
1. Хорошо, я внедрю это решение и посмотрю, работает ли оно. Спасибо =)
2. Большое вам спасибо, я реализовал это, и это сработало. Большое спасибо =)