Java操作Oracle

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

你可能感兴趣的:(oracle)