jdbc连接数据库的实现

       写了一点测试用例。很久没有使用过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来插入值,免除了对于不同值设置的麻烦。

猜你喜欢

转载自aeolus1983.iteye.com/blog/2316386