JDBC连接oracle数据库 ,Statement, PreparedStatement,CallableStatement 的使用,对时间参数的处理

 
JDBC连接oracle
1.在Oracle数据库安装文件夹中找到 jdbc文件夹→lib文件夹 E:\app\amin\product\11.2.0\dbhome_1\jdbc\lib
2.在myeclipse中导入此Jar包
    导入方法:
           建立一个项目,在项目名称上右键鼠标选择
           Build Path→ConfigBuildPath->libaraies→Add jars或add Externaljars
           用 ojdbcX.jar进行导入

3.新建一程序编写与Oracle连接的代码
    步骤如下:
 1).实例化驱动类
          class.forName("oracle.jdbc.OracleDriver");//
          
 2).建立到数据库的连接
          String url="jdbc:oracle:thin:@localhost:ORCL";
          Connection conn = DriverManager.getConnection(url,"scott","tiger");
          如果提示无法连接,请检查: 
          ip地址,oracle的数据库名称是否对,用户名密码
Statement 用于处理sql语句:
(注意: Connection,Resultset,Statement,
        PreparedStatement,CallableStatement都是java.sql包中的
 3).将创建语句对象,发送sql到数据库中
          Statement stm = conn.createStatement();

 4).执行语句(select语句),得于结果集
          ResultSet rs = stm.executeQuery("select * from dept");

 5).从结果集取数据
            while(rs!=null&& rs.next){//rs为空的情况为sql语句错误
              rs.getString("deptno");
              rs.getString("deptno");
          }
  //问题2 DML
	        String sql2="update emp set sal=sal+1 where empno="+7788;
	        int intNum=stm.executeUpdate(sql2);
	        System.out.println("intNum="+intNum);
	        
//问题3 日期的处理
	        //查hiredate大于1982-01-01 的所有员工
	        System.out.println("------------");
	        String d="1982-01-01";
	        //to_date('1982-01-01','yyyy-mm-dd')
	     String sql3="select * from emp where hiredate>to_date('"+d+"','yyyy-mm-dd')";
	        rs=stm.executeQuery(sql3);
	        while(rs!=null&& rs.next()){  //rs.next()下一行有没有数据
	        	int empno=rs.getInt("empno");
	        	String name=rs.getString("ename");
	        	System.out.println(empno+" "+name );
	        }

 
 
PreparedStatement 用于处理预编译语句
/**
 * 
 * preparedStatement 是statement的子类
 * 作用:
 * 1. 简化编程,减少sql拼接
 * 2. 防止sql注入
 * 3. 预编译,提高效率!
 *
 注意:通过PreparedStatement防止SQL注入,对JDBC而言,SQL注入攻击只对Statement有效,对PreparedStatement无效
public static void main(String[] args) {	
		 Connection conn=null;
		 Statement stm=null;
		 ResultSet rs=null;
		try {
			//1).实例化驱动类
			Class.forName("oracle.jdbc.OracleDriver");//反射
			// 2).建立到数据库的连接
			//String url="jdbc:oracle:thin:@192.168.0.1:1521:ORCL";
	        String url="jdbc:oracle:thin:@localhost:1521:ORCL";
	        conn = DriverManager.getConnection(url,"scott","tiger");
	        //3).将创建语句对象,发送sql到数据库中
	        stm = conn.createStatement();
	        String sql="select * from emp";
	        rs=stm.executeQuery(sql);
	        //4)取结果 
	        System.out.println("rs="+rs);
	        while(rs!=null&& rs.next()){  //rs.next()下一行有没有数据
	        	int empno=rs.getInt("empno");
	        	String name=rs.getString("ename");
	        	System.out.println(empno+" "+name );
	        }
	        
	        //问题2 DML
	        String sql2="update emp set sal=sal+1 where empno="+7788;
	        int intNum=stm.executeUpdate(sql2);
	        System.out.println("intNum="+intNum);
	        
	        //问题3 日期的处理
	        //查hiredate大于1982-01-01 的所有员工
	        System.out.println("------------");
	        String d="1982-01-01";
	        //to_date('1982-01-01','yyyy-mm-dd')
	        String sql3="select * from emp where hiredate>to_date('"+d+"','yyyy-mm-dd')";
	        rs=stm.executeQuery(sql3);
	        while(rs!=null&& rs.next()){  //rs.next()下一行有没有数据
	        	int empno=rs.getInt("empno");
	        	String name=rs.getString("ename");
	        	System.out.println(empno+" "+name );
	        }
	        
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
	        try {
	        	if(rs!=null){
				  rs.close();
	        	}
			} catch (SQLException e) {
				e.printStackTrace();
			}
	        try {
	        	if(stm!=null){
				   stm.close();
	        	}
			} catch (SQLException e) {
				e.printStackTrace();
			}
	        try {
	        	if(conn!=null){
				   conn.close();
	        	}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

	}

 CallableStatement 用于调用存储过程

import java.sql.*;
/**
 * CallableStatement 是PreparedStatement的子类
 * 语法:
 * String sql="{call myproc3(?,?,?)}";
 *
 */
public class JDBCTestCall {

	public static void main(String[] args) {	
		 Connection conn=null;
		 Statement stm=null;
		 ResultSet rs=null;
		try {
			//1).实例化驱动类
			Class.forName("oracle.jdbc.OracleDriver");//反射
			// 2).建立到数据库的连接
			//String url="jdbc:oracle:thin:@192.168.0.1:1521:ORCL";
	        String url="jdbc:oracle:thin:@127.0.0.1:1521:ORCL";
	        conn = DriverManager.getConnection(url,"scott","tiger");
	        
	        //演示1 call myproc3 有1个in 2个out
	        String sql="{call myproc3(?,?,?)}";
	        //问题1 进行查询拼接
	        CallableStatement call= conn.prepareCall(sql);
	        //处理参数
	        call.setInt(1, 10);//第1个问号  in
	        call.registerOutParameter(2, Types.DOUBLE);
	        call.registerOutParameter(3, Types.DOUBLE);
	        call.execute();
	        //取out结果
	        double totalSal= call.getDouble(2);
	        double avgSal=call.getDouble(3);
	        System.out.println("total="+totalSal+" avgSal="+avgSal);
	        
	        //演示2 
	        String sql2="{call showEmpInfo(?,?,?,?,?)}";
	        call= conn.prepareCall(sql2);
	        //处理参数
	        call.setDouble(1, 1000);//第1个问号  in
	        call.setDouble(2, 3000);
	        call.registerOutParameter(3, Types.DOUBLE);
	        call.registerOutParameter(4, Types.DOUBLE);
	        call.registerOutParameter(5, oracle.jdbc.OracleTypes.CURSOR);//
	        call.execute();
	        //取out结果
	        double cnt= call.getDouble(3);
	        double ss=call.getDouble(4);
	        ResultSet rs1=(ResultSet)call.getObject(5);//结果集??
	        
	        System.out.println("cnt="+cnt+" ss="+ss);
	        while(rs1!=null&& rs1.next()){  //rs.next()下一行有没有数据
	        	int empno=rs1.getInt("empno");
	        	String name=rs1.getString("ename");
	        	System.out.println(empno+" "+name );
	        }	 
	        	
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			//close();
		}

	}

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值