publicclassDBCon{ //数据库驱动对象 publicstaticfinalStringDRIVER="oracle.jdbc.driver.OracleDriver"; //数据库连接地址(数据库名) publicstaticfinalStringURL="jdbc:oracle:thin:@localhost:1521:orcl"; //登陆名 publicstaticfinalStringUSER="scott"; //登陆密码 publicstaticfinalStringPWD="123456"; //创建数据库连接对象 privateConnectioncon=null; //创建数据库预编译对象 privatePreparedStatementps=null; //创建结果集 privateResultSetrs=null; //创建数据源对象 publicstaticDataSourcesource=null; publicConnectiongetCon(){ try{ Class.forName(DRIVER); con=DriverManager.getConnection(URL,USER,PWD); System.out.println("数据库连接成功!"); }catch(Exceptione){ System.err.println("数据库连接失败!"); e.printStackTrace(); } returncon; } publicvoidcloseAll(){ if(rs!=null) try{ rs.close(); }catch(SQLExceptione){ e.printStackTrace(); } if(ps!=null) try{ ps.close(); }catch(SQLExceptione){ e.printStackTrace(); } if(con!=null) try{ con.close(); }catch(SQLExceptione){ e.printStackTrace(); } } publicintupdate(Stringsql,String...pras){ intresu=0; con=getCon(); try{ ps=con.prepareStatement(sql); for(inti=0;i<pras.length;i++){ ps.setString(i+1,pras[i]); } resu=ps.executeUpdate(); }catch(SQLExceptione){ } finally{ closeAll(); } returnresu; } publicResultSetquery(Stringsql,String...pras){ con=getCon(); try{ ps=con.prepareStatement(sql); if(pras!=null) for(inti=0;i<pras.length;i++){ ps.setString(i+1,pras[i]); } rs=ps.executeQuery(); }catch(SQLExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } returnrs; } publicstaticvoidmain(String[]args)throwsSQLException{ DBCondbCon=newDBCon(); // dbCon.getCon(); ResultSetresultSet=dbCon.query("select*fromemp",null); while(resultSet.next()){ System.out.printf("%-10d",resultSet.getInt(1)); //输出10列,左对齐(-号表示左对齐) // System.out.print(resultSet.getInt(1)+"\t\t"); System.out.printf("%-10s",resultSet.getString(2)); // System.out.print(resultSet.getString(2)+"\t\t"); System.out.printf("%-20s",resultSet.getString(3)); // System.out.print(resultSet.getString(3)+"\t\t\t\t"); System.out.printf("%-10d",resultSet.getInt(4)); // System.out.print(resultSet.getInt(4)+"\t\t"); System.out.print(resultSet.getDate(5)+"\t\t"); System.out.print(resultSet.getDouble(6)+"\t\t"); System.out.print(resultSet.getDouble(7)+"\t\t"); System.out.println(resultSet.getInt(8)); } dbCon.closeAll(); } }
Jar包下载 http://yunpan.cn/QC5IeekKJvixN 提取码 243b
Java操作Oracle实现事务回滚
DBCondbCon=newDBCon(); Connectionconnection=dbCon.getCon(); Stringsql=""; Statementstatement=null; try{ connection.setAutoCommit(false);//设置事物不自动提交 sql="updateempsetsal=sal-100whereename='SMITH'"; statement=connection.createStatement(); statement.executeUpdate(sql); inti=7/0;//抛异常。 sql="updateempsetsal=sal-100whereename='JAMES'"; statement.executeUpdate(sql); connection.commit(); }catch(Exceptione){ //注意这里如果是SQLException,上面7/0抛出的异常就不会被这里捕获到,下面的rollback自然就不会执行。陷阱 try{ connection.rollback();//事务回滚 }catch(SQLExceptione1){ e1.printStackTrace(); } e.printStackTrace(); }finally{ dbCon.closeAll(); if(statement!=null){ try{ statement.close(); }catch(SQLExceptione){ e.printStackTrace(); } } }
默认情况下事物自动提交,此时上例中抛出异常后,前面的sql语句可以执行成功,后面的不会被执行。进行事物管理之后,上例中抛出异常后,事物会在下面的catch块中回滚。保证两个sql语句都不执行。
本文出自 “阿凡达” 博客,请务必保留此出处http://shamrock.blog.51cto.com/2079212/1532489