• 环境装好了,我们来学JDBC编程;数据库连接了,我来教操作~


    目录

    JDBC是什么?

    所需环境

    将下载好的jar包导入到项目中

    现在来用Java代码操作MySQL~

    1.创建数据源对象,数据源对象就描述了要访问的数据库是什么,在哪?

     2.找地址(URL体现出数据库服务器的位置,以及名字)

    3.设置打开数据库的钥匙

    4.访问连接

    5.用户输入

    6.执行sql语句

    7.释放关闭相关资源

    面试题:

    结语:


    JDBC是什么?

            全称:Java Database Connectivity(Java数据库连接),是由标准库提供的一套API,使得Java可以通过这些接口实现与数据库的连接,为多种关系数据库提供同一访问。


    所需环境

            JDBC在使用的时候,需要下载并导入对应的数据库的驱动包(以下使用Java代码来操作MySQL),建议大家去官网(

    )找到对应的jar包,以下为官网链接

    Maven Repository: Search/Browse/Explore (mvnrepository.com)


    将下载好的jar包导入到项目中

    1.创建一个与.idea同级的包,起个名字叫:“lib”~;

    2. 将jar包拷贝到lib中

    3.右击lib标记成存放库文件(jar包)的目录,然后,IDEA就可以识别目录中的jar包

     这里可以看到jar包可以展开了,说明IDEA可以对其进行识别

     以上就是准备过程~


    现在来用Java代码操作MySQL~

    1.创建数据源对象,数据源对象就描述了要访问的数据库是什么,在哪?

    1. //来自标准库JDBC的接口
    2. import javax.sql.DataSource;
    3. //来自MySQL的驱动包(jar包)
    4. import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
    5. DataSource dataSource = new MysqlDataSource();

            解释和分析:DataSource描述了在哪里能找到数据库数据,其实也可以使用DriverManager,但是更推荐DataSource,因为DriverManager每次getConnection都需要重新建立连接,而DataSource是内置连接池,类似String的字符串常量池,连接复用,提高效率

     2.找地址(URL体现出数据库服务器的位置,以及名字)

    ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/user?characterEncoding=utf8&useSSL=false");

    解释和分析:

     jdbc:mysql是协议名称;

    //127.0.0.1是IP地址,描述了网络上一个主机的位置,127.0.0.1是一个特殊的地址,无论IP是什么,都可以用127.0.0.1表示自己;

    3306是端口号,用来区分主机上的不同应用程序,在安装数据库时,其中一个环节就是配置端口号,默认就是3306;

    user是要访问的数据库的名字(通过create database创建的);

    characterEncoding=utf8是刻划断使用的字符集,要和服务器那边一致,所以这里使用utf8;

    useSSL=false这里表示不加密;

    3.设置打开数据库的钥匙

    1. ((MysqlDataSource)dataSource).setUser("root");
    2. ((MysqlDataSource)dataSource).setPassword("123456");

            解释和分析:输入登录用户名,和密码,用户名一般同一是root,这时MySQL自带的,密码就是安装数据库时设置的密码

    4.访问连接

    1. //建立连接,注意这里要抛异常
    2. Connection connection = dataSource.getConnection();

    解释和分析:和数据库服务器连接,再进行后续操作

    5.用户输入

    1. //通过用户输入来改变数据库中的值a
    2. Scanner scanner = new Scanner(System.in);
    3. System.out.println("请输入员工ID:");
    4. int ID = scanner.nextInt();
    5. System.out.println("请输入员工姓名:");
    6. String name = scanner.next();
    7. //执行构造的sql语句
    8. // ? 是一个占位符,只是占个位置,后面会被替换成其他的东西
    9. String sql = "insert into staff values(?, ?)";
    10. PreparedStatement statement = connection.prepareStatement(sql);
    11. //1 2 数字表示占位符下标,默认从1开始,set方法是一个系列:setXXX(XXX表示类型)
    12. statement.setInt(1, ID);
    13. statement.setString(2, name);
    14. System.out.println(statement);

    解释和分析:通过用户输入数据来确定插入的值,注意这里最好不要用字符串拼接的方式:1.代码很乱;2.容易引发SQL注入漏洞——被黑客攻击 

    6.执行sql语句

    1. //执行sql,方法有两种:
    2. //executeUpdate 对应插入删除修改语句. 返回值表示这次 SQL 操作影响到的行数.
    3. //executeQuery 对应查询语句. 返回值则是返回的临时表数据.
    4. int n = statement.executeUpdate();
    5. System.out.println("n = " + n);

    7.释放关闭相关资源

    1. //最后关闭释放相关资源(注意,先创建的后释放,后创建的先释放)
    2. statement.close();
    3. connection.close();

    解释和分析:

    注意要先创建的后释放,后创建的先释放!

    问题:为什么要释放?new一个对象要消耗空间资源,为什么以前没有释放过?

    那个是Java内置的GC机制,帮咱释放了,但只是能回收对象,也不是万能的;


    面试题:

     1.数据库Statement和PreparedStatement有什么联系和区别?

    联系:PreparedStatement继承自Statement,都是接口;

    区别:PreparedStatement可以使用占位符,是预编译的,批处理比Statement效率高;

    2.数据库连接有哪些方式?分别有什么区别

           1.通过DriverManager(驱动管理类)的静态方法获取;

            2.通过DataSource(数据源)对象获取;

            区别:DriverManager每次getConnection都需要重新建立连接,而DataSource是内置连接池,类似String的字符串常量池,连接复用,提高效率;


    结语:

            这里基于JCBC写的代码本质上是一个MySQL客户端,未来工作中大部分的数据库操作,都是通过代码来完成的;实际开发中,很少会直接使用JDBC,代码比较啰嗦,实际开发中会用到一些库/框架 简化这里的数据库操作(MyBatis),各种库和框架本质上又是对JDBC进行的封装;


     

  • 相关阅读:
    PHP乱七八糟面试题
    这个编辑器即将开源!
    快速幂算法
    【Jetpack Compose】BOM是什么?
    【面试题】如何理解 前端设计模式-测策略模式?
    【C++风云录】开源金融与科技库探索:优化计算与高效分析
    音视频开发基础概念
    java判断对象是否还在被引用
    MindStudio安装及测试
    Java native 关键字
  • 原文地址:https://blog.csdn.net/CYK_byte/article/details/126463171