项目里增删改查时遇到的问题

批量提交使用的方法:ps.addBatch(),ps.executeBatch(),ps.clearBatch(),

try {
	PreparedStatement ps = conn.prepareStatement(sql);
	final int batchSize = 1000;
	int count = 0;
	for (Employee employee : employees) {
		ps.setString(1, employee.getName());
		ps.setString(2, employee.getPosition());
		ps.setString(3, employee.getSex());
		ps.setDouble(4, employee.getSalary());
		ps.addBatch();//批量提交
		if(++count % batchSize == 0) {
	        ps.executeBatch();
	        ps.clearBatch();
	    }
	}
	int[] r = ps.executeBatch();		//最后一次提交,可能不足1000个
	
	ps.clearBatch();
	ps.close();
	conn.close();
} catch (SQLException e) {
	e.printStackTrace();
}


数据库事务

public class TransactionUtil {
	/*
	 * 处理数据库事务
	 * */
	public static Connection conn = DBUtil.getConnection();
	
	/**
	 * 设置自动提交状态
	 * @param state
	 */
	public static void setAutoCommit(boolean state){
		try {
			conn.setAutoCommit(state);
		} catch (SQLException e) {
			System.out.println("设置自动提交状态失败");
			e.printStackTrace();
		}
	}
	/**
	 * 提交
	 */
	public static void commit(){
		try {
			conn.commit();
		} catch (SQLException e) {
			System.out.println("提交失败");
			e.printStackTrace();
		}
	}
	
	public static void rollback() {
		try {
			conn.rollback();
		} catch (SQLException e) {
			System.out.println("回滚失败");
			e.printStackTrace();
		}
	}
}

获取自动主键

	ps = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);		//现在需要第二个参数,激活自动获取key,否则会报错Generated keys not request

	addflag = ps.executeUpdate();
	rsGeneratedkeys = ps.getGeneratedKeys();		




ResultSetMetaData

String sql = "select * from user,student";
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData rsmd =  rs.getMetaData();
System.out.println("..........ResultSetMetaData............");

System.out.println("表名::::::"+rsmd.getTableName(1));//第一列的表名
System.out.println("表名::::::"+rsmd.getTableName(4));//第四列的表名			
//列数
int columnCount = rsmd.getColumnCount();
//列名
String columnName = null;
for (int i = 1; i <= columnCount; i++) {
	columnName=rsmd.getColumnName(i);
	System.out.println(columnName);
}
使用 getMetaData() 方法从 ResultSet 中获取 ResultSetMetaData 对象。您可以使用此对象获得列的数目和类型以及每一列的名称。 

getColumnCount(); 返回 ResultSet 中的列数。 
getColumnName(int); 返回列序号为 int 的列名。 
getColumnLabel(int); 返回此列暗含的标签。 
isCurrency(int); 如果此列包含带有货币单位的一个数字,则返回 true。 
isReadOnly(int); 如果此列为只读,则返回 true。 
isAutoIncrement(int); 如果此列自动递增,则返回 true。这类列通常为键,而且始终是只读的。 
getColumnType(int); 返回此列的 SQL 数据类型。



可滚动结果集

PreparedStatement stmt2 = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet rs2 = stmt2.executeQuery();
//判断一下mysql数据库是否支持TYPE_FORWARD_ONLY
DatabaseMetaData dbmd=conn.getMetaData();
if(dbmd.supportsResultSetType(ResultSet.TYPE_FORWARD_ONLY)){
    System.out.println("*******MySQL支持TYPE_FORWARD_ONLY结果集**********");
}else{
    System.out.println("*******MySQL不支持TYPE_FORWARD_ONLY结果集**********");
}
System.out.println("这是"+dbmd.getDatabaseProductName()+"数据库"
		+ ",版本是:"+dbmd.getDatabaseProductVersion());
//以下只有在设置为“可滚动”时才可以用  
rs2.first();//使第一行成为当前行  
System.out.println(rs2.getString(1)); //得到第一个雇员号  
rs2.last(); //使最后一行成为当前行  
System.out.println(rs2.isLast());  
System.out.println(rs2.getString(1)); 
//            rs2.next();
System.out.println("0000000000000");
System.out.println(rs2.isAfterLast());//是否位于最后一行之后  
System .out.println(rs2.getRow());  
rs2.previous(); //向前移动移动一行,此处为倒数第二行  
System.out.println(rs2.getString(1));  
rs2.absolute(6);  //定位到第6行  
System.out.println(rs2.getString(1));



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值