JDBC(Java Database Connectivity,简称JDBC)---客户端程序如何来访问数据库

JDBC(Java Database Connectivity,简称JDBC)—客户端程序如何来访问数据库

前言:

主流架构:

1、BS架构(Browser and Server) 浏览器服务器架构—>web、javaweb、phpweb

2、CS架构(Client and Server) 客户端服务器架构 —>QQ、微信

简言之就是用java程序去访问数据库

正文:

JDBC的连接步骤:

加载驱动—>建立连接—>执行语句—>得到结果集

1、加载驱动

加载驱动,首先是先把驱动jar包导入

 <!--mysql驱动-->
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.11</version>
    </dependency>

编写测试用例;

 //初始化驱动
    public void init(){
        try {
            //加载mysql驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //建立连接  参数解释:第一个参数是数据库链接地址(不同数据库会有不同的连接地址,由数据库厂商提供),第二个参数是用户名,第三个参数是密码
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/zjh?serverTimezone=GMT&useSSL=false&allowPublicKeyRetrieval=true", "root", "123");
            //获取数据库预处理对象preparedStatement  并编写sql语句
            PreparedStatement preparedStatement = conn.prepareStatement("select * from user");
            //执行查询语句
            ResultSet resultSet = preparedStatement.executeQuery();
            //循环读取查询结果集(因为查询的结果可能不止一条)
            while(resultSet.next()){
                //打印查询出来的第一个字段
                System.out.println(resultSet.getString(1));
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }


    //编写主函数测试
    public static void main(String[] args) {
        new MyJdbc().init();
    }

要知道,我们每访问一次数据库,其实都是与数据库建立了一次会话,建立会话之后,你所有的增删改查,都是在本次会话中进行的,假如说,会话终止,或者在建立会话的时候建立失败,那么你所有的增删改查的动作都无效

需要注意的是,如果你执行的是查询语句,才会有结果集,如果是增加更新删除,只会有执行的条数,返回类型是型

优化:

再看看以上代码,其实有很大一部分咱们没有考虑到,所以他现在是烂代码,怎么把它变成好代码,降低耦合。

所谓降低耦合就是降低程序之间的依赖关系,比如修改数据库参数的时候,咱们不用改动源码,直接在配置文件上面修改就可以运行(因为改了源码的话,还需要重新编译,编译之后的文件是.class的字节码文件,不能直接修改参数,所以我们需要借助配置文件的帮助)

配置文件:

java中配置文件主流的分两种,一种是properties,一种是xml,这里我使用的是properties。

编写一个db.properties,存放到咱们的resource资源文件夹根目录下(里面一定不要为了格式而多大空格,空格会算入内容,以键值对的形式编写)

#降低程序代码间的依赖关系,使用配置文件
jdbc.url=jdbc:mysql://localhost:3306/zjh?serverTimezone=GMT&useSSL=false&allowPublicKeyRetrieval=true
jdbc.username=root
jdbc.password=123

接下来就是读取配置文件让咱们的代码依赖减少:

  //读取配置文件
            Properties properties = new Properties();
            properties.load(this.getClass().getClassLoader().getResourceAsStream("db.properties"));
            conn = DriverManager.getConnection(properties.getProperty("jdbc.url"),properties.getProperty("jdbc.username") ,properties.getProperty("jdbc.password") );

这样几遍改动数据库密码账号,我都不需要改动源码文件,只需要修改配置文件就可以了。

注意事项:

在一次会话结束之后,一定要注意,打开的资源要关闭,咱们jvm的内存和mysql的连接数是有限的,不能把资源一直开着,执行结束以后就关闭资源,养成良好的代码风格

源码展示:

MyJdbc.java

package cn.tfs.jdbc;


import java.io.IOException;
import java.sql.*;
import java.util.Properties;

public class MyJdbc {
    private Connection conn;
    private PreparedStatement preparedStatement;
    private ResultSet resultSet;
    //初始化驱动
    public void init(){
        try {
            //加载mysql驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //建立连接  参数解释:第一个参数是数据库链接地址(不同数据库会有不同的连接地址,由数据库厂商提供),第二个参数是用户名,第三个参数是密码
            //读取配置文件
            Properties properties = new Properties();
            properties.load(this.getClass().getClassLoader().getResourceAsStream("db.properties"));
            conn = DriverManager.getConnection(properties.getProperty("jdbc.url"),properties.getProperty("jdbc.username") ,properties.getProperty("jdbc.password") );
            //获取数据库预处理对象preparedStatement  并编写sql语句
            preparedStatement = conn.prepareStatement("select * from user");
            //执行查询语句并将查询结果拿给结果集
            resultSet = preparedStatement.executeQuery();
            //循环读取查询结果集(因为查询的结果可能不止一条)
            while(resultSet.next()){
                //打印查询出来的第一个字段
                System.out.print(resultSet.getString("id")+"\t");
                System.out.print(resultSet.getString("name")+"\t");
                System.out.print(resultSet.getString("age")+"\t");
                System.out.println();
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //释放资源 关闭连接  (必要的)
            try {
                resultSet.close();
                preparedStatement.close();
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }

        }
    }

    public String query(){
        return "";
    }
    public int delete(){
        return 0;
    }
    public int upDate(){
        return 0;
    }
    public int add(){
        return 0;
    }

    //编写主函数测试
    public static void main(String[] args) {
        new MyJdbc().init();
    }
}

db.properties

#降低程序代码间的依赖关系,使用配置文件
jdbc.url=jdbc:mysql://localhost:3306/zjh?serverTimezone=GMT&useSSL=false&allowPublicKeyRetrieval=true
jdbc.username=root
jdbc.password=123

需要帮助的同学欢迎留言或者联系邮箱:[email protected]

1580540814070

发布了12 篇原创文章 · 获赞 13 · 访问量 3514
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章