2011-05-27 64 views
1

我想制作一种方法在不同的表格上插入数据,我想让用户以 作为参数将表格名称和要插入的数据列表放在一起。制作一种将数据插入不同表格的方法

事情是这样的:

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之外的其他内容。您是否考虑过创建一个类型为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) 
    { 
    } 
} 

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

+0

好的,我会实施这个解决方案,看看它是否工作。谢谢=) – gustavo 2011-05-27 13:50:36

+0

非常感谢你,我实现了这一点,它的工作。非常感谢=) – gustavo 2011-05-27 14:27:52

相关问题