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

来源:互联网 发布:sql reference 编辑:程序博客网 时间:2024/06/05 10:14

批量提交使用的方法: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 requestaddflag = 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_ONLYDatabaseMetaData 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));



原创粉丝点击