2011-05-27 58 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

相關問題