JDBC笔记总结

JDBC

概述

JDBC简介
  • 在java语言中编写sql语句,对mysql数据库中的数据进行增删改查操作
  • JDBC实际是一个接口
JDBC本质
  • 类库:java.sql.*;

  • 这个包下都是JDBC的接口,sun公司制定的!

  • JDBC是体现“接口作用”的非常经典的例子。

  • JDBC降低了耦合度,提高了可扩展力。

  • 对于java程序员来说,不需要关心数据库是哪个品牌。只要面向JDBC接口编程就行。

  • JDBC整个程序的结构当中有三波人???

    • 第一波:sun公司,负责制定JDBC接口,这些接口已经写好了,在java.sql.*;

    • 第二波:java.sql.*下面的所有接口都要有实现类,这些实现类是数据库厂商编写的。

      ​ 我们连接的是mysql数据库,mysql数据库厂商的实现类在哪?

      ​ mysql-connector-java-5.1.49-bin.jar ---->术语:mysql的驱动

      ​ jar包中很多.class字节码文件,这是mysql数据库厂商写的接口实现!

      ​ 注意:如果连接的是Oracle数据库,你需要从网上下载Oracle的jar包。

    • 第三波:我们java程序员,面向JDBC接口写代码就行!

JDBC开发前的准备工作(如果使用IDEA 不需要配置)
  • mysql的驱动jar包,需要配置到classpath中

  • classpath=.;D:\os\mysql-connector-java-5.1.49-bin.jar

  • 以上的classpath什么意思?

    ​ 类加载器从当前路径下加载class,如果当前路径下没找到,

    ​ 则去D:\os\mysql-connector-java-5.1.49-bin.jar找class文件

JDBC步骤

  • 1.导入jar包 mysql-connector-java-5.1.49-bin.jar
    1.复制mysql-connector-java-5.1.49-bin.jar到项目的libs目录下
    2.右键–>Add As Library

  • 2.注册驱动

    //方式一
    DriverManager.registerDriver(new com.mysql.jdbc.Driver());
    /*  方式二 类加载注册
    	mysql厂家写的类:
    	class com.mysql.jdbc.Driver{
    		static {
          	  try {
                    DriverManager.registerDriver(new Driver());
                } catch (SQLException var1) {
                    throw new RuntimeException("Can't register driver!");
                }
            }
        }
    */
    Class.forName("com.mysql.jdbc.Driver");
    
  • 3.获取数据库连接对象Connection

    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","root");
    
  • 4.获取数据库操作对象Statement

    Statement stmt = conn.createStatement();
    
  • 5.执行sql语句

    String sql = "";
    //执行查询语句,返回一个结果集
    ResultSet rs = stmt.executeQuery(sql);
    //执行增删改查、DDL(create、delete、drop)语句,返回一个int整数:影响的行数,可以通过这个影响的行数判断是否执行成功,返回值回值>0则执行成功,反之,则失败。
    int s = stmt.executeUpdate();
    
  • 6.处理结果

    //调用ResultSet接口中相应的方法遍历结果集
    //将游标向下移动一行,指向的位置有数据,返回ture;返回false表示游标指向的位置没有数据了
    while(rs.next()){
        //JDBC所有下标都是从1开始的
        //getXxx(参数):获取数据
        //Xxx:代表数据类型  如:int getInt()  String getString()
        				//参数:
    					//1.int  列从1开始
    					//2.String  字段名称
        String result1 = rs.getString(1);//注意:getString()不管底层数据库是什么类型,统一返回字符串
        String result2 = rs.getString("ename");
        String result3 = rs.getString(3);
        System.out.println(result1+","+result2+","+result3);
    }
    
  • 7.释放资源

    • 从下往上关闭。

配置文件 jdbc.properties

#mysql connectivity configuration########
url=JDBC:mysql:///shop
user=root
password=root
driver=com.mysql.jdbc.Driver

数据库工具类

import java.sql.*;
import java.util.ResourceBundle;

/**
 * 数据库工具类,便于JDBC的代码编写
 */
public class DBUtil {
     //工具类中的构造方法一般是私有化的,为什么?
    //构造方法私有化是为了防止new对象,为什么要防止new对象?
    //因为工具类中的方法都是静态的,不需要new对象,直接使用“类名.”的方式调用。

    private static String url;
    private static String user;
    private static String password;

    private DBUtil(){}

    //类加载时绑定属性资源文件
    private static ResourceBundle bundle = ResourceBundle.getBundle("jdbc");

    //注册驱动
    static {
        try {
            Class.forName(bundle.getString("driver"));
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取数据库连接对象
     * @return 新的连接对象
     * @throws SQLException
     */
    public static Connection getConnection() throws SQLException {
        url = bundle.getString("url");
        user = bundle.getString("user");
        password = bundle.getString("password");
        Connection conn = DriverManager.getConnection(url,user,password);
        return conn;
    }

    /**
     * 释放资源
     * @param conn 连接对象
     * @param stmt 数据库操作对象
     * @param rs 查询结果集
     */
    public static void close(Connection conn, Statement stmt, ResultSet rs){
        if( rs != null){
            try {
                rs.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if( stmt != null){
            try {
                stmt.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if( conn != null){
            try {
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值