写了一点测试用例。很久没有使用过jdbc了。写起来还是怪生疏的。还是习惯JDBCTemplate啊。大家做工程还是使用框架能快一点点。
package com.myTest.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import com.mysql.jdbc.PreparedStatement; public class JdbcTestClass { private String url="jdbc:mysql://localhost:3306/xview?user=root&password=root"; public static Connection getConn(String url) { Connection conn = null; try { //1.加载驱动 Class.forName("com.mysql.jdbc.Driver"); //2.获取连接 conn = DriverManager.getConnection(url); } catch (ClassNotFoundException e) { System.err.println("加载数据库驱动失败["+e.getMessage()+"]"); conn = null; } catch (SQLException e) { e.printStackTrace(); conn = null; } return conn; } public List<List<Object>> testSelect(){ String sql="SELECT * FROM a;"; Statement stat = null; ResultSet rs = null; Connection conn = JdbcTestClass.getConn(this.url); List<List<Object>> result = new ArrayList(); if(conn!=null){ try { stat = conn.createStatement(); rs = stat.executeQuery(sql); while(rs.next()){ List row = new ArrayList(); for(int i=1;i<=rs.getMetaData().getColumnCount();i++){ String className = rs.getMetaData().getColumnClassName(i); try { Object obj =rs.getObject(i); row.add(obj); } catch (Exception e) { e.printStackTrace(); } } result.add(row); } stat.close(); } catch (SQLException e) { e.printStackTrace(); } } return result; } public boolean testInsert(List<List<Object>> rows){ boolean flag = false; Connection conn = null; Statement stat = null; conn = JdbcTestClass.getConn(this.url); if(conn!=null){ try { String sql = "INSERT INTO b VALUES("; stat=conn.createStatement(); for(int i=0;i< rows.get(0).size();i++){ sql+="?"; if(i!=rows.get(0).size()-1){ sql+=","; }else{ sql+=") ON DUPLICATE KEY UPDATE day_id=day_id;"; } } System.out.println(sql); java.sql.PreparedStatement pstmt = conn.prepareStatement(sql); for(int rowNum=0;rowNum<rows.size();rowNum++){ List<Object> row = rows.get(rowNum); int i=1; for(Object column: row){ System.out.println(i); pstmt.setObject(i++, column); } pstmt.addBatch(); } pstmt.executeBatch(); pstmt.close(); flag = true; } catch (SQLException e) { e.printStackTrace(); } } return flag; } public static void main(String [] args){ JdbcTestClass tst = new JdbcTestClass(); List<List<Object>> list = tst.testSelect(); boolean flag = tst.testInsert(list); if(flag){ System.out.println("insert success"); }else{ System.out.println("insert fail"); } } }
代码里演示了使用jdbc连接mysql后,从a表插入到b表的情况。
- 使用批处理形式进行INSERT操作。.
- 使用了ON DUPLICATE KEY UPDATE 的sql。
- 使用Object来插入值,免除了对于不同值设置的麻烦。