我想制作一个方法来在不同的表上进行插入,我想要用户 将参数作为参数放入表中,并列出要插入的数据。
这样的事情:
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)
{
}
}
我的问题是我无法弄清楚如何设置值 字符串是因为数据的大小和类型可以根据而改变 我正在使用的桌子。
有没有办法做到这一点?或者我需要让它与众不同?
提前致谢!
答案 0 :(得分:1)
您的链接列表可能包含String
以外的内容。您是否考虑过创建一种Binding
类知道如何在prepareStatement上设置值?我想象的是这样的:
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)
{
}
}
我认为这是一个非常方便的解决方案,我希望它会帮助你。祝你好运!