制作一种在不同表中插入数据的方法

时间:2011-05-27 02:58:27

标签: java mysql insert prepared-statement

我想制作一个方法来在不同的表上进行插入,我想要用户 将参数作为参数放入表中,并列出要插入的数据。

这样的事情:

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 个答案:

答案 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) 
    {
    }
}

我认为这是一个非常方便的解决方案,我希望它会帮助你。祝你好运!