• JDBC连接MySQL数据库(一)——数据库的基本连接


    JDBC的概念
    在使用之前我们先了解一下JDBC的概念, JDBC的全称是数据库连接(Java Database Connectivity),它是一套用于执行SQL语句时的API,应用程序可以通过这套API连接到关系型数据库,并且使用SQL语句来完成数据库中的查询,添加,更改,删除等操作.。
    不同类型的数据库内部处理数据的方式也是不同的,如果直接用数据库厂商提供的方法来建立访问数据,应用程序的可移植性就会变得非常差,如果某个用户在当前的程序中使用的是MySQL的数据库,如果换成Oracle的数据库这样需要改动大量的代码,有了JDBC这样的情况就不存在了,因为JDBC 要求数据库的厂商按照统一的要求来提供数据库的驱动,这就使代码的通用性更强.

    由上图看出,JDBC在应用程序和数据库之间是一个桥梁的作用,不同的驱动与不同的数据连接, 连接后进行相应的操作

    了解JDBC中的API
    Driver 接口
    Driver接口是所有JDBC驱动程序必须实现的接口,该接口专门给数据库厂商使用。在编写JDBC程序时,必须要把所有数据库驱动程序或者类库加载到classpath中去。

    DriverManager接口
    方法 作用
    regsiterDriver(Driver driver) 用于向DriverManager中注册JDBC的驱动程序
    getConnection(String url, String user,String password) 建立与数据库的连接
    Connection 接口
    方法 作用
    createStatement( ) 创建statement对象将SQL语句发送到数据库中
    prepareStatement( ) 创建preparestatement对象将SQL语句发送到数据库中
    prepareCall() 创建CallableStatement对象调用数据库的存储过程
    注意:在这里我们看到createStatement和prepareStatement方法都是创建对象将SQL语句发送到数据库中,但是有什么不同呢?我们暂且用createStatement方法,prepareStatement方法我们之后再谈它的用途。

    Statement接口
    方法 作用
    execute(String sql) 执行SQL 语句返回boolean类型的值 如果为true表示有结果,通过ResultSet方法查询结果
    executeUpdate(String sql) 执行SQL语句中的 insert delete update 方法返回值为int类型
    executeQuery 执行SQL中select语句
    ResultSet接口
    方法 描述
    getString(String name) 获取String类型的值 ,name代表字段的名称
    getInt(int index) 获取int类型的值,index代表字段的名称
    next() 当前位置到下一行
    previous() ResultSet的上一行
    absolute(int row) ResultSet的指定位置
    建立连接步骤
    在写代码之气需要把MySQL的jar包导入到项目中,找到MySQLConnector J 8.0 中的mysql-connector-java-8.0.14.jar文件导入工程中

    要建立数据库的连接,首先要注册MySQL数据库的驱动
    完成数据库驱动的注册,建立数据库的连接
    创建statement对象,
    执行sql语句
    遍历查询数据
    释放资源
    JDBC基础代码
    解释了建立连接数据库的步骤和常用的API,接下来就看看最基础的代码如何实现的:


    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    public class pracjdbc {
    public static void main(String [] args) {
    try {
    //1.注册驱动
    DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
    /*2.建立数据库的连接 获取参数依次是url,user,password url连接本地数据库,user 用户名称,password数据库密码*/
    Connection conn=
    DriverManager.getConnection("jdbc:mysql://localhost/studentinformation?serverTimezone=GMT%2B8", "root", "81604152");
    //3.创建statement对象
    Statement st=conn.createStatement();
    String sql = "select * from info";
    //4.执行sql语句
    ResultSet rs = st.executeQuery(sql);
    //5.遍历查询数据
    while(rs.next()) {
    int id =rs.getInt("id");
    String name = rs.getString("name");
    System.out.println(id+":"+name);
    }
    //6.释放资源
    conn.close();
    st.close();
    rs.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    JDBC代码改进
    刚刚写最进本的的代码现在我们看一下在刚刚的基础上稍微做一些改进

    资源释放
    在资源释放这里起始并不是这样写法,实际使用通过finally语句块
    将资源释放的
    try {
    if(conn != null) {
    conn.close();
    }
    } catch (SQLException e) {

    e.printStackTrace();
    }finally{
    conn = null;
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    这样写过于冗长,统一写一个类取完成这个操作


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

    public class JDBCutils {
    public static void ReleaseAll(Connection conn, ResultSet rs, Statement st) {
    CloseConn(conn);
    CloseSt(st);
    CloseRs(rs);
    }
    public static void ReleaseAll(Connection conn, Statement st) {
    CloseConn(conn);
    CloseSt(st);
    }
    private static void CloseConn(Connection conn) {
    try {
    if(conn != null) {
    conn.close();
    }
    } catch (SQLException e) {
    e.printStackTrace();
    }finally {
    conn = null;
    }
    }
    private static void CloseRs(ResultSet rs) {
    try {
    if(rs != null) {
    rs.close();
    }
    } catch (SQLException e) {
    e.printStackTrace();
    }finally {
    rs = null;
    }

    }
    private static void CloseSt(Statement st) {
    try {
    if(st != null) {
    st.close();
    }
    } catch (SQLException e) {
    e.printStackTrace();
    }finally {
    st = null;
    }

    }

    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    再来看看建立驱动的步骤 进入底层源码


    static {
    try {
    java.sql.DriverManager.registerDriver(new Driver());
    } catch (SQLException E) {
    throw new RuntimeException("Can't register driver!");
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    Driver中已经建立了驱动实际上我们自己建立驱动就是已经多余了,
    修改代码如下


    Class.forName("com.mysql.cj.jdbc.Driver");
    1
    2
    完整代码如下:


    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    public class pracjdbc {
    public static void main(String [] args) {
    Connection conn= null;
    Statement st = null;
    ResultSet rs = null;
    try {
    Class.forName("com.mysql.cj.jdbc.Driver");
    //DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
    conn= DriverManager.getConnection("jdbc:mysql://localhost/studentinformation?serverTimezone=GMT%2B8", "root", "81604152");
    st=conn.createStatement();
    String sql = "select * from info";
    rs = st.executeQuery(sql);
    while(rs.next()) {
    int id =rs.getInt("id");
    String name = rs.getString("name");
    System.out.println(id+":"+name);
    }
    } catch (Exception e) {
    e.printStackTrace();
    }finally {
    JDBCutils.ReleaseAll(conn, rs, st);
    }
    }
    }
    --------------------- 

  • 相关阅读:
    什么是 rel="shortlink" ?
    HTML5 怎么兼容 XHTML
    Connection to `ssl://pecl.php.net:443' failed: mac系统
    记录小程序中经常犯的错误---在wxml中使用js方法(打脸不)
    从js对象数组中删除某一个对象
    彻底搞懂字符串提取方法 slice,substr,substring
    vue 项目中笔记-持续更新
    CF526G Spiders Evil Plan
    BZOJ2178 圆的面积并
    计算几何入门
  • 原文地址:https://www.cnblogs.com/ly570/p/10987478.html
Copyright © 2020-2023  润新知