2011-05-20 9 views
1

jsf bean内のjdbc prepared statementで "INSERT INTO ALL STATEMENT"をどのように使用できるかを教えてください。jdbcでINSERT INTO ALLステートメントを使用する方法豆を使用してステートメントを準備しました

実際には、私は現在の従業員のIDを単一のjsfページを使用し、各従業員IDに対して1つのテキストボックスを使用しています。

これを行うには、どのようにINSERT INTO ALLステートメントを使用できますか?

以下は私のコードスニペットです。

AttendanceBean.java:

public class AttendanceBean { 
private int atteid;      
    private String attdname; 
private int attday; 
private int attmonth; 
private int attyear; 

    public static Connection getAttConnection() throws Exception { 
    String driver = "oracle.jdbc.driver.OracleDriver"; 
    String url = "jdbc:oracle:thin:@localhost:1521:globldb3"; 
    String username = "scott"; 
    String password = "tiger"; 
    Class.forName(driver); 
    Connection conn = DriverManager.getConnection(url, username, password); 
    return conn; 
    } 
public String addAttendance(){ 
    Connection conn = null; 
    PreparedStatement pstmt = null; 
    boolean committed = false; 
try { 
    conn = getAttConnection(); 
    conn.setAutoCommit(false); 
    String query = "INSERT ALL INTO attendance VALUES (?,?,?,?,?)"; 
    pstmt = conn.prepareStatement(query); 
    pstmt.setInt(1,this.atteid); 
    pstmt.setString(2,this.attdname); 
    pstmt.setInt(3,this.attday); 
    pstmt.setInt(4,this.attmonth); 
    pstmt.setInt(5,this.attyear); 
      pstmt.executeUpdate(); 
     conn.commit(); 
     conn.setAutoCommit(true); 
     committed = true; 
    return "home.xhtml"; 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return "CRM.xhtml"; 
    } finally { 
      try{ 
       if (!committed) conn.rollback(); 
       if (pstmt != null) pstmt.close(); 
       if (conn != null) conn.close(); 
      }catch(Exception e){ 
       e.printStackTrace(); 
      } 
     } 
     } 
    }  
+0

この質問は、JSFとはまったく関係ありません。通常のスタンドアロンJavaクラスでは、まったく同じ問題が発生します。慎重にタグを付けてください。 – BalusC

答えて

3

マルチ挿入のための正しいSQLの構文は次のとおりです。

INSERT INTO 
    tbl (col1, col2, col3) 
VALUES 
    (val1a, val2a, val3a), 
    (val1b, val2b, val3b), 
    (val1c, val2c, val3c), 
    ... 

しかし、JDBCに、あなたがより良いループでPreparedStatement#addBatch()を使用したいです、マルチインサートを行うにはexecuteBatch()が続きます。キックオフの例を次に示します。

private static final String SQL_INSERT = "INSERT INTO tbl (col1, col2, col3) VALUES (?, ?, ?)"; 

public void save(List<Entity> entities) throws SQLException { 
    Connection connection = null; 
    PreparedStatement statement = null; 

    try { 
     connection = database.getConnection(); 
     statement = connection.prepareStatement(SQL_INSERT); 

     for (Entity entity : entities) { 
      statement.setObject(1, entity.getCol1()); 
      statement.setObject(2, entity.getCol2()); 
      statement.setObject(3, entity.getCol3()); 
      statement.addBatch(); 
     } 

     statement.executeBatch(); 
    } finally { 
     if (statement != null) try { statement.close(); } catch (SQLException ignore) {} 
     if (connection != null) try { connection.close(); } catch (SQLException ignore) {} 
    } 
} 
関連する問題