JDBC入门

目录

 

一、JDBC

1.JDBC的概念

2.JDBC的由来

3.JDBC的好处

4. JDBC会用到的包

5. JDBC四个核心对象

二、获取连接

1. API介绍

2.注册驱动

3.使用配置文件保存数据库帐号密码

三、JDB增删改操作

1. API介绍

2.Starement的API介绍

四、JDBC事务

1.API介绍

五、JDBC工具类

六、PreparedSatement预编译对象

1.API介绍


一、JDBC

1.JDBC的概念

JDBC(Java数据库连接)是Java访问数据库的标准规范。

2.JDBC的由来

JDBC规范定义接口,具体的实现由各大数据库厂商来实现。

3.JDBC的好处

(1)我们只需要会调动JDBC接口中的方法即可

(2)使用同一套java代码,进行少量的修改就可以访问其它JDBC支持的数据库

4. JDBC会用到的包

(1)java.sql:JDBC访问数据库的基础包,在JavaSE中的包。如:java.sql.Connection

(2)javax.sql:JDBC访问数据库的扩展包

(3)数据库的驱动,各大数据库厂商来实现。如:MySQL的驱动:com.mysql.jdbc.Driver

5. JDBC四个核心对象

(1)DriverManager: 用于注册驱动

(2)Connection: 表示与数据库创建的连接

(3)Statement: 执行SQL语句的对象

(4)ResultSet: 结果集或一张虚拟表

二、获取连接

1. API介绍

static Connection getConnection(String url,String user,String password)

url:连接数据库的URL

Mysql数据库写法为:

jdbc:mysql://localhost:3306/数据库名

user:数据库的账号

password:数据库的密码

2.注册驱动

Java.sql.DriverManager类用于注册驱动

方法如下:

static void registerDriver(Driver driver)

该方法源码如下:

public class Driver extends NonRegisteringDriver implements java.sql.Driver {
static {
try {
// 自己自动注册
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
public Driver() throws SQLException {
}
}

使用 Class.forName(“包名.类名”)会走这个类的静态代码块,无需调用DriverManager的方法,不然驱动会被注册两次。

3.使用配置文件保存数据库帐号密码

public static Connection getConnection() throws Exception {
        //准备连接数据库的四个字符串
        String driverClass = null;
        String user = null;
        String password = null;
        String jdbcUrl = null;
        //读取配置文件
        //读取类路径下的jdbc.properties
        InputStream is = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
        Properties properties = new Properties();
        properties.load(is);
        driverClass = properties.getProperty("driverClass");
        user = properties.getProperty("user");
        password = properties.getProperty("password");
        jdbcUrl = properties.getProperty("jdbcUrl");
        //加载数据库驱动程序(注册驱动)
        Class.forName(driverClass);
        //通过DriverManager获取连接
        Connection coo = DriverManager.getConnection(jdbcUrl, user, password);
        return coo;
    }
driverClass=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/8.24
user=root
password=123456

注意:

JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");

会找到src/jdbc.properties加载并返回InputSreream对象

三、JDB增删改操作

1. API介绍

Statement createStatement():创建一个Statement对象将SQL语句发送到数据库

2.Starement的API介绍

boolean execute(String sql):可以执行任意sql语句

int executeUpdate(String sql):可以执行DML语句

ResultSet executeQuery(String sql):可以执行SELECT语句

四、JDBC事务

1.API介绍

void setAutoCommit(boolean autoCommit) throws SQLException;

                          false:开启事务   true:关闭事务

void commit() throws SQLException:提交事务

void rollback() throws SQLException:回滚事务

五、JDBC工具类

1.将固定字符串定义为常量

2. 在静态代码块中注册驱动(只注册一次)

3. 提供一个获取连接的方法static Connection getConneciton();

4. 定义关闭资源的方法close(Connection conn, Statement stmt, ResultSet rs)

5. 重载关闭方法close(Connection conn, Statement stmt)

public class JDBCUtils {
    // 1.将固定字符串定义为常量
    private static final String DRIVER_CLASS = "com.mysql.jdbc.Driver";
    private static final String URL = "jdbc:mysql:///day24";
    private static final String USER = "root";
    private static final String PASSWORD = "root";

    // 2.在静态代码块中注册驱动(只注册一次)
    // 当这个类加载到内存的时候就走这个静态代码块,再去触发Driver类中的静态代码块,主动注册
    static {
        try {
            Class.forName(DRIVER_CLASS);
        } catch (ClassNotFoundException e) {
        }
    }

    // 3.提供一个获取连接的方法static Connection getConneciton();
    // 我们面向JDBC编程
    public static Connection getConnection() throws SQLException {
        Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
        return conn;
    }

    // 5.重载关闭方法close(Connection conn, Statement stmt)
    public static void close(Connection conn, Statement stmt) {
        close(conn, stmt, null);
    }

    // 4.定义关闭资源的方法close(Connection conn, Statement stmt, ResultSet rs)
    public static void close(Connection conn, Statement stmt, ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
            }
        }
        if (stmt != null) {
            try {
                stmt.close();
            } catch (SQLException e) {
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
            }
        }
    }
}

六、PreparedSatement预编译对象

prepareStatement()会先将SQL语句发送给数据库预编译。PreparedStatement会引用着预编译后的结果。可以多次传入不同的参数给PreparedStatement对象并执行。相当于调用方法多次传入不同的参数。

编写SQL语句,未知内容使用?占位:

 "SELECT * FROM user WHERE name=? AND password=?";

1.API介绍

PreparedStatement prepareStatement(String sql):会先将SQL语句发送给数据库预编译

 

void setDouble(int paramterIndex,double x)

void setFloat(int paramterIndex,float x)

void setObject(int paramterIndex,Object x)

 

ResultSet executeQuery():在此PreparedStatement对象中执行SQL查询,并返回该查询生成的ResultSet对象

int executeUpdate():在此PreparedStatement对象中执行SQL语句,比如INSERT、UPDATE或DELETE语句。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值