笔记:Jdbc理解与连接笔记

11 篇文章 0 订阅
4 篇文章 0 订阅

1.最初的jdbc连接:

/**
 * jdbc工具类,负责:
 * 1. 加载/注册数据库驱动程序
 * 2. 获取数据库连接
 * 3. 释放数据库资源(Connection, Statement, ResultSet)
 */

1.资源文件jdbc.properties

jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:ORCL
jdbc.username=root
jdbc.password=123456

2.JdbcUtil.java

package com.lanqiao.dao;
import java.sql.*;
import java.util.ResourceBundle;
public class JdbcUtil {
    /**
     * 读取资源属性文件中的信息
     */
    private static String getValue(String key) {
        // 资源包绑定
        ResourceBundle bundle = ResourceBundle.getBundle("jdbc");
        return bundle.getString(key);
    }

    private static final String DRIVER = getValue("jdbc.driver");
    private static final String URL = getValue("jdbc.url");
    private static final String USERNAME = getValue("jdbc.username");
    private static final String PASSWORD = getValue("jdbc.password");

    static{
        try {
            //1. 注册数据库驱动程序
            Class.forName(DRIVER);
        } catch (ClassNotFoundException e) {
            System.err.println("注册数据库驱动程序失败。" + e.getMessage());
        }
    }

    public static Connection getConnection() {
        try {
            Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
            return  conn;
        } catch (SQLException e) {
            System.err.println("a获得数据连接失败。" + e.getMessage());
        }
        return null;
    }
    public static void close(Connection conn, Statement stmt, ResultSet rs) {
        try {
            //关闭数据库的资源的顺序最好与使用的顺序相反
            if(rs != null){
                rs.close();
            }
            if(stmt != null){
                stmt.close();
            }
            if(conn != null){
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        System.out.println(getValue("jdbc.driver"));
        System.out.println(getConnection());
    }
}

3.Jdbc调用步骤

1. 将驱动程序包加入到Module 的dependency 中
2. 新建一个属性文件:jdbc.properties
3. 编写一个JdbcUtils工具类:
  a) 加载/注册数据库驱动程序
  b) 获取数据库连接
  c) 释放数据库资源(Connection, Statement, ResultSet)

4. 编写一个DAO类:EmployeeDao,提供一个查询所有员工的方法:List<Employee> selectAll();
    a) 通过JdbcUtils工具类获得数据库连接
        Connection conn = JdbcUtils.getConnection();

    b) 通过数据库连接Connection创建语句对象
        Statement stmt = conn.createStatement();

    c) 执行语句并获得查询结果集
        ResultSet rs = stmt.executeQuery("select * from employee order by empno");

    d) 遍历查询结果集
        while(rs.next()){
            //Xxx表示数据相对应的Java数据类型:
            // char,varchar2:getString("列名")
            // number(2):getInt("列名")
            // number(7,2): getDouble("列名")
            // date: getDate("列名")
            Xxx value = rs.getXxx("列名");
            Employee e = new Employee(.....);
            arrayList.add(e);
        }

    e) 最后必须关闭数据资源:Connection, Statement, Resultset

4.Jdbc调用存储过程

Connection connection = JdbcUtil.getConnection();
        try {
            CallableStatement cs = 
                connection.prepareCall("{call sum_sal_by_job(?,?,?)}");
            //设置点位符的值:in模式
            cs.setString(1,"CLERK");
            cs.setString(3, "default value");

            //若过程有输出参数模式的,必须在过程执行前注册输出参数,
            //也是说要告诉oracle驱动要得到哪个占位符的值
            cs.registerOutParameter(2, Types.DOUBLE, 2);
            cs.registerOutParameter(3, Types.VARCHAR);

            // 执行存储过程
            boolean isSucc = cs.execute();

            // 获得输出参数值
            double sumSal = cs.getDouble(2);
            String x = cs.getString(3);

            System.out.println("总工资:" + sumSal);
            System.out.println("测试in out模式:" + x);

        }

2.不使用资源文件,数据库密码直接写进jdbc连接里

package dao;
import java.sql.*;
import java.util.ResourceBundle;
public class MyJdbcUtil {
    static{
        try {
            //1. 注册数据库驱动程序
            Class.forName("oracle.jdbc.driver.OracleDriver");
        } catch (ClassNotFoundException e) {
            System.err.println("注册数据库驱动程序失败。" + e.getMessage());
        }
    }

    public static Connection getConnection() {
        try {
            /*2. 获取数据库连接url+user+password*/
            Connection conn = 
                DriverManager.getConnection(
                "jdbc:oracle:thin:@localhost:1521:ORCL",
                "root",
                "123456");
            return  conn;
        } catch (SQLException e) {
            System.err.println("a获得数据连接失败。" + e.getMessage());
        }
        return null;
    }

    public static void close(Connection conn, Statement stmt, ResultSet rs) {
        try {
            //3.关闭数据库的资源的顺序最好与使用的顺序相反
            if(rs != null){
                rs.close();
            }
            if(stmt != null){
                stmt.close();
            }
            if(conn != null){
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        System.out.println(getConnection());
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值