【问题标题】:Making a method to insert data in different tables制作一种在不同表中插入数据的方法
【发布时间】:2011-05-27 02:58:26
【问题描述】:

我想用一种方法在不同的表上进行插入,我希望用户 将表名和要插入的数据列表作为参数。

类似这样的:

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

我的问题是,一旦 制作字符串是因为数据的大小和类型可以根据 我正在使用的表。

有没有办法做到这一点?或者我需要让它与众不同?

提前致谢!

【问题讨论】:

    标签: java mysql insert prepared-statement


    【解决方案1】:

    您的链接列表可能应该包含String 以外的其他内容。您是否考虑过创建一个知道如何设置preparedStatement 值的Binding 类?我正在设想这样的事情:

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

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

    【讨论】:

    • 好的,我将实施这个解决方案,看看它是否有效。谢谢=)
    • 非常感谢我实现了这个并且它有效。非常感谢 =)
    猜你喜欢
    • 2019-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    相关资源
    最近更新 更多