08 | JDBC

问题:数据库那么多,实现方式各有不同,我们难道要全部学习吗?

解决:JDBC本质是sum公司定义的接口(规则),各个厂商实现这个接口,提供数据库驱动jar包。我们可以使用这套JDBC进行编程,真正执行的代码是驱动jar包中的实现类。

步骤:
1.导入jar包 mysql-connector-java-5.1.37-bin.jar【可以用其他版本】
2.注册驱动
3.获取连接数据库对象Connection
4.定义sql
5.获取执行sql对象 Statement
6.执行sqlk,接受返回结果
7.处理结果
8.释放资源

这有几个对象,我们逐一讲解

1.DriverManager:驱动管理对象

a.注册驱动

Class.forName("com.mysql.jdbc.Driver");

查看源码

 static {
        try {
            DriverManager.registerDriver(new Driver());
        } catch (SQLException var1) {
            throw new RuntimeException("Can't register driver!");
        }
    }

通过查看源码可以知道,真正注册驱动的是DriverManager

b.获取数据库连接

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

1.url:指定连接路径

  • 语法:jdbc:mysql//ip地址(域名):端口号/数据库名称

2.user 用户名
3.password 密码

2.Connection:数据库连接对象

a.获取执行sql对象
Statement createStatement()

PreparedStatement prepareStatement(String sql)
b.管理事务
  • 开启事务 setAutoCommit(boolean autoCommit) 将参数设置为false即可开启事务
  • 提交事务 commit()
  • 回滚事务 rollback()

3.Statement:执行sql对象

执行sql

boolean execute(String sql)可以执行任意sql 【了解】

int executeUpdate(String sql):执行增删改操作【DML[insert,update,delete] 、DQL[create、alter、drop] 】

ResultSet executeQuery(String sql):执行DQL(select)语句

4.ResultSet:结果集对象

  • next():游标移到下一行
  • getxxx(参数):获取数据
    xxx代表数据类型
    参数:int代表列编号(从1开始);String代表列名称

为了可读性,这里不用try-catch,只是抛出异常

public class p1 {
    public static void main(String[] args) throws Exception {
        //获取连接
        Connection conn = null;
        //创建statement对象
        Statement stmt = null;
        ResultSet rs = null;

        Class.forName("com.mysql.jdbc.Driver");
        conn = DriverManager.getConnection("jdbc:mysql://cdb-8n7tqsvb.gz.tencentcdb.com:10010/student_dome", "root", "wzh123456");
        stmt = conn.createStatement();

        String sql = "SELECT * FROM student";
        stmt.execute(sql);

        rs = stmt.executeQuery(sql);
        while (rs.next()) {
            String id = rs.getString("id");
            String name = rs.getString("name");
            String sex = rs.getString("sex");
            String age = rs.getString("age");
            System.out.println("id:" + id + "-- name:" + name);
        }
    }
}

5.PreparedStatement:执行sql对象

后期都会使用这个PreparedStatement来执行sql
原因:1.可以防止sql注入 2.效率更高

你可能感兴趣的:(08 | JDBC)