现在的位置: 首页 > 综合 > 正文

JDBC各项操作复习

2017年12月27日 ⁄ 综合 ⁄ 共 3649字 ⁄ 字号 评论关闭

jdbc

//jdbc demo		
	Class.forName(dbDriver).newInstance();
	Connection conn = DriverManager.getConnection(url);
	conn.setAutoCommit(true);	

	// --要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3种类型:
	// 1、执行静态SQL语句。通常通过Statement实例实现。
	// 2、执行动态SQL语句。通常通过PreparedStatement实例实现。
	// 3、执行数据库存储过程。通常通过CallableStatement实例实现。
	// --具体的实现方式:
	// Statement stmt = con.createStatement() ;
	// PreparedStatement pstmt = con.prepareStatement(sql) ;
	// CallableStatement cstmt = con.prepareCall("{CALL demoSp(? , ?)}") ;
	Statement stmt = conn.createStatement();	

	// execute()
	// int executeUpdate(String sql):执行给定 SQL语句,INSERT、UPDATE或DELETE 语句,或者不返回任何内容的 SQL 语句(如 SQL DDL 语句)。
	Integer i = stmt.executeUpdate(updateSql);

	// ResultSet executeQuery(String sql):执行给定的SQL语句,该语句返回单个ResultSet对象。
	ResultSet rs = stmt.executeQuery(querySql);

	// ResultSet: 表示数据库结果集的数据表。最初,光标被置于第一行之前。next方法将光标移动到下一行;因为该方法在
	// ResultSet对象没有下一行时返回 false,所以可以在while循环中使用它来迭代结果集。
	String name = "";
	while (rs.next()) {
		name = rs.getString("sname");
		System.out.println(name);
	}	

	// 关闭数据库连接
	if (rs != null) { // 关闭记录集
		rs.close();
	}
	if (stmt != null) { // 关闭声明
		stmt.close();
	}
	if (conn != null) { // 关闭连接对象
		conn.close();
	}

Statement:

//Statement是先用Connection得到一个空的执行器,在执行的时候给它传拼好的sql
//这只能是拼好的字符串,而不能动态的传参数,并且在数据库中每次肯定穿的是不同的sql语句,因此每次都要解析编译
Statement stmt = conn.createStatement();			
stmt.execute(sql);

PrepareStatement:

/*
PreparedStatement是在创建pstm的时候就给它传一个动态的sql预编译,参数是通过pstm设置的。执行时,只需要空执行一下就可以.
1. PreparedStatement可以写参数化查询,比Statement能获得更好的性能。
2. 对于PreparedStatement来说,数据库可以使用已经编译过及定义好的执行计划,这种预处理语句查询比普通的查询运行速度更快。
3. PreparedStatement可以阻止常见的SQL注入式攻击。
4. PreparedStatement可以写动态查询语句  
--占位符的索引位置从1开始而不是0   
*/
String sql="insert into jdbc_users values(?,?)";
PreparedStatement pstmt= pstmt=conn.prepareStatement(sql);
pstmt.setInt(1, user.getId());
pstmt.setString(2, user.getName());	
pstmt.execute();

处理多参数查询:

public static List queryByMultiParamsAndDealResultSet(String sql, Object... paramValues) throws SQLException {
	List list = new ArrayList();
	pstmt = connection.prepareStatement(sql);
	for (int i = 0; i < paramValues.length; i++) {
		pstmt.setObject(i + 1, paramValues[i]);
	}
	resultSet = pstmt.executeQuery();

	// ResultSetMetaData 是结果集元数据,可获取关于 ResultSet 对象中列的类型和属性信息的对象
	// 例如:结果集中共包括多少列,每列的名称和类型等信息
	ResultSetMetaData metaData = resultSet.getMetaData();
	int cols_len = metaData.getColumnCount();
	while (resultSet.next()) {
		Map map = new HashMap();
		for (int i = 0; i < cols_len; i++) {
			String cols_name = metaData.getColumnName(i + 1);
			Object cols_value = resultSet.getObject(cols_name);
			if (cols_value == null) {
				cols_value = "";
			}
			map.put(cols_name, cols_value);
		}
		list.add(map);
	}
	System.out.println(list);
	return list;
}

JDBC批量操作:

/**
 * 批量执行sql语句,by statement
 */
public static Boolean executeStatementBatchSQL(Connection conn, List<String> sqlList) {
	try {
		// 创建执行SQL的对象
		Statement stmt = conn.createStatement();
		for (String sql : sqlList) {
			stmt.addBatch(sql);
		}
		int[] result = stmt.executeBatch();			
		Boolean tag=true;
		for(int i=0;i<result.length;i++){
			if(i<0){
				tag=false;
			}
		}
		return tag;			
	} catch (SQLException e) {
		return false;
	}
}

/**
 * 批量执行sql语句,by preparedStatement
 */
public static Boolean executePreparedStatementBatchSQL(Connection conn, String sql, int[] param1, String[] param2) {
	try {
//			sql="UPDATE EMPLOYEES  SET SALARY = ? WHERE ID =?";
		PreparedStatement pstmt  = conn.prepareStatement(sql);
		for(int i =0;i<10;i++){
			pstmt.setInt(1, param1[i]);
			pstmt.setString(2, param2[i]);
			pstmt.addBatch();
		}
		int[] result = pstmt.executeBatch();			
		Boolean tag=true;
		for(int i=0;i<result.length;i++){
			if(i<0){
				tag=false;
			}
		}
		return tag;			
	} catch (SQLException e) {
		return false;
	}
}

---JDBC存储过程:
参见procedureTest.java

---JDBC事务处理:

参见TransactionTest.java

	System.out.println("事务处理开始!");
	con.setAutoCommit(false); // 设置连接不自动提交,即用该连接进行的操作都不更新到数据库
	Statement sm = con.createStatement(); 		
	sm.execute(sqls[i]);
	System.out.println("提交事务处理!");
	con.commit(); // 提交给数据库处理
	System.out.println("事务处理结束!");
	//...
	System.out.println("事务执行失败,进行回滚!\n");
	con.rollback(); // 若前面某条语句出现异常时,进行回滚,取消前面执行的所有操作

抱歉!评论已关闭.