java访问Oracle数据库

JDBCUtils.java类中

package utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCUtils {

    private static String driver = "oracle.jdbc.OracleDriver";
    private static String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
    private static String user = "c##zs";
    private static String password = "111";
    
    static{
        try {
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            throw new ExceptionInInitializerError(e);
        }
    }

    public static Connection getConnection(){
        try {
            return DriverManager.getConnection(url, user, password);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

  
    public static void release(Connection conn,Statement st,ResultSet rs){
        if(rs != null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }finally{
                rs = null;   //----> Java GC
            }
        }
        if(st != null){
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }finally{
                st = null;
            }
        }
        if(conn != null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }finally{
                conn = null;
            }
        }
    }
}

studentDao类

package dao;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import utils.JDBCUtils;

public class StudentDAO {
	
	/**
     * 查询学生
     */
    public void selectStudent() {
        Connection conn= JDBCUtils.getConnection();
        String sql = "select * from student";
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            pstmt = conn.prepareStatement(sql);
            rs = pstmt.executeQuery();
            while (rs.next()) {
                String student_id = rs.getString("student_id");
                String sname = rs.getString("sname");
                String ssex = rs.getString("ssex");
                String sbirth = rs.getString("sbirth");
                System.out.println(student_id+"\t"+sname+"\t"+ssex+"\t"+sbirth);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JDBCUtils.release(conn, pstmt, rs);;
        }
    }

    
    /*存储过程:根据学号查询姓名
    create or replace procedure p_selectsname(p_sid in char, p_sname out varchar2)
	is
	begin
	  select sname into p_sname from student where student_id=p_sid;
	end p_selectsname; 
    */
    public void testProcedure(){
    	Connection conn= JDBCUtils.getConnection();
        PreparedStatement pstmt = null;
    	CallableStatement proc = null;
        try {
			proc = conn.prepareCall("{ call p_selectsname(?,?) }"); //调用存储过程
			proc.setString(1, "1801001");//设置第一个参数输入参数
			proc.registerOutParameter(2, Types.VARCHAR);//第二个参数输出参数,是VARCHAR类型的
			proc.execute();//执行
			String sname = proc.getString(2);//获得输出参数
			System.out.println("学生姓名="+sname);
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
            JDBCUtils.release(conn, pstmt, null);
        }
    }
    
    /*函数:根据课程名,查询选修这门课程的人数
    CREATE or REPLACE FUNCTION COUNT_STU(F_CNAME IN VARCHAR2) 
	RETURN NUMBER
	AS
	rel NUMBER := 1;
	BEGIN
	  SELECT COUNT(STUDENT_ID) INTO rel FROM SC, COURSE C
	  WHERE sc.COURSE_ID = C.COURSE_ID AND C.CNAME = F_CNAME;
	  RETURN rel;
	END COUNT_STU;
     */
    public void testFunction(){
  
        Connection conn = null;
        CallableStatement call = null;
        try {
            conn = JDBCUtils.getConnection();
            call = conn.prepareCall("{?=call COUNT_STU(?)}");  //调用函数     
             //对于out参数,声明类型
            call.registerOutParameter(1, Types.INTEGER);         
            //对于in参数,赋值
            call.setString(2, "Java");          
            //执行
            call.execute();           
            //取出结果
            int r = call.getInt(1);
            System.out.println("学习人数="+r);
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
        	JDBCUtils.release(conn, null, null);
        }        
    }
    
}

测试类test.java

package dao;

/*
 * 测试访问数据库方法
 */
public class Test {

	public static void main(String[] args) {
		StudentDAO sdao = new StudentDAO();
		
		//查询student表
		//sdao.selectStudent();
        
		//调用存储过程
		sdao.testProcedure();
		
		//调用函数
		//sdao.testFunction();
	}

}

Oracle 中存储过程:根据学号查询姓名

create or replace procedure p_selectsname(p_sid in char, p_sname out varchar2)
	is
	begin
	  select sname into p_sname from student where student_id=p_sid;
	end p_selectsname; 

Oracle中函数:根据课程名,查询选修这门课程的人数

CREATE or REPLACE FUNCTION COUNT_STU(F_CNAME IN VARCHAR2) 
	RETURN NUMBER
	AS
	rel NUMBER := 1;
	BEGIN
	  SELECT COUNT(STUDENT_ID) INTO rel FROM SC, COURSE C
	  WHERE sc.COURSE_ID = C.COURSE_ID AND C.CNAME = F_CNAME;
	  RETURN rel;
	END COUNT_STU;

左侧栏中为数据库的几个表

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值