MySQL之JDBC编程

White graces:个人主页

🙉专栏推荐:Java入门知识🙉

🙉 内容推荐:🙉

🐹今日诗词:🐹


⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏

⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏


概念

JDBC编程就是数据库提供API接口到主流编译器中,通过API进行数据库操作

如何使用IDEA进行MySQL操作

我们需要将MySQL驱动包导入到IDEA编译器中

驱动包下载地址: Maven 存储库:mysql >> mysql-connector-java (mvnrepository.com)

根据你的MySQL版本下载即可,高版本兼容低版本

如果你的MySQL是5.7版本,只需要下载5开头的驱动包即可

文件导入

将下载的文件导入到项目中

名字随便取,一般写lib, lib是library的缩写,图书馆的意思,在Java中表示库的意思

复制下载的MySQL驱动包,点击IDEA的lib,然后粘贴就会自动导入了

接下来

创建数据源

数据源是描述你要操作的数据库的位置,是MySQL,SQL sever,还是oracle数据库以及具体位置

数据源格式: IP地址 + 端口号 + 库名

由于我们日常学习使用的MySQL,客户端和服务端都是我们自己的电脑

所以IP地址写成: 127.0.0.1 (这个IP叫做环回地址,表示客户端和服务器都在一台主机上面)

MySQL默认端口号是: 3306

如果使用第二种写法,当我们换成oracle数据库是就会出现对不上的情况

而第一种情况由于DataSource是父类,转型调用就会非常方便,代码耦合性更低

耦合性

比如一串代码调用了MySQL数据库的方法,如果这串代码只能在MySQL上运行,说明代码耦合性很高,但是如果换了其他数据库还能继续使用说明耦合性低

内聚

我们写代码一般追求低耦合,高内聚

高内聚就是将有关系的代码放在一起,便于阅读,类似于文件分类

低内聚就像是七龙珠散落在世界各地,实现愿望还要满世界找来找去

JDBC增删改操作

以下是一个较为完整的JDBC操作(以插入数据为例子),所有源码放在最后了

设置数据源

这样就把数据源设置完毕了

数据库名是create database创建的库

连接数据库服务端

数据源设置完毕,我们就可以通过getConnection方法连接数据库服务器了

构建SQL语句

Statement是语句的意思直接将我们写的代码发送给服务器,由服务器解析并执行
PreparedStatement是预处理语句,可以将我们写的代码在本地进行解析,变成SQL语句后在发给服务器执行

很明显PreparedStatement更好,减少了服务器的开销,因为服务器会收到许多请求,如果都在服务器上解析执行,显然不如把解析后的代码发送到服务器上效率高

发送到服务器执行

释放资源

一般释放资源都是close, 同时释放资源时要注意释放顺序

所有演示代码

java 复制代码
    import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
    
    import javax.sql.DataSource;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    
    public class TestJDBC {
        public static void main(String[] args) throws SQLException {
            DataSource dataSource = new MysqlDataSource();
            //1.设置数据源
            ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java?characterEncoding=utf8&useSSL=false");
            ((MysqlDataSource)dataSource).setUser("root"); //设置用户名
            ((MysqlDataSource)dataSource).setPassword("qwer1234"); //设置密码
            //2.和数据库服务器建立连接
            Connection connection = dataSource.getConnection();
            //3.构造SQL语句
            String sql = "insert into student values(1,'张三');";
            PreparedStatement statement = connection.prepareStatement(sql);
            //通过connection里的prepareStatement方法生成一个预处理语句对象
            //4.将构造好的SQL语句发送给服务器执行
            int n = statement.executeUpdate();
            System.out.println("n = " + n );
            //5.释放资源
            statement.close();  //先创建的后释放,顺序不能颠倒了
            connection.close();
    
        }
    }
    

PreparedStatement的占位符使用

我们发现上面的插入操作是写死了的,这时就可以通过PreparedStatement提供的?占位符进行优化,就能实现动态构造SQL语句了

占位符?的作用: 占位的目的是为了替换,如何操作呢?

JDBC查询操作

大致和插入操作差不多,区别在于查询返回了一个ResultSet结果集,如何遍历结果集才是我们关注的,前面的操作和插入类似

具体操作: 使用resultSet.next()方法遍历

java 复制代码
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class SelectJDBC {
    public static void main(String[] args) throws SQLException {
        //1.设置数据源,用户名密码
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("qwer1234");
        //2.连接数据库服务器
        Connection connection = dataSource.getConnection();
        //3.构建SQL语句,并进行预处理
        String sql = "select * from student;";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        //4.发送SQL语句到服务器执行
        ResultSet resultSet = preparedStatement.executeQuery();
        while (resultSet.next()) {
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            System.out.print("学号: " + id + "  姓名: " + name );
            System.out.println();
        }
        //5.释放资源
        resultSet.close();
        preparedStatement.close();
        connection.close();
    }
}

✨🎆谢谢你的阅读和耐心!祝愿你在编程的道路上取得更多的成功与喜悦!"🎆✨🎄

⭐️点赞收藏加关注,学习知识不迷路⭐️

🎉✔️💪🎉✔️💪🎉✔️💪🎉✔️💪🎉

👍😏⛳️点赞☀️收藏⭐️关注😏👍

👍😏⛳️点赞☀️收藏⭐️关注😏👍

👍😏⛳️点赞☀️收藏⭐️关注😏👍

🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️

相关推荐
东软吴彦祖22 分钟前
包安装利用 LNMP 实现 phpMyAdmin 的负载均衡并利用Redis实现会话保持nginx
linux·redis·mysql·nginx·缓存·负载均衡
慵懒的猫mi1 小时前
deepin分享-Linux & Windows 双系统时间不一致解决方案
linux·运维·windows·mysql·deepin
小高不明2 小时前
仿 RabbitMQ 的消息队列2(实战项目)
java·数据库·spring boot·spring·rabbitmq·mvc
DZSpace2 小时前
使用 Helm 安装 Redis 集群
数据库·redis·缓存
张飞光2 小时前
MongoDB 创建集合
数据库·mongodb
Hello Dam2 小时前
接口 V2 完善:基于责任链模式、Canal 监听 Binlog 实现数据库、缓存的库存最终一致性
数据库·缓存·canal·binlog·责任链模式·数据一致性
张飞光2 小时前
MongoDB 创建数据库
数据库·mongodb·oracle
摘星怪sec3 小时前
【漏洞复现】|方正畅享全媒体新闻采编系统reportCenter.do/screen.do存在SQL注入
数据库·sql·web安全·媒体·漏洞复现
基哥的奋斗历程3 小时前
学到一些小知识关于Maven 与 logback 与 jpa 日志
java·数据库·maven
苏-言4 小时前
MyBatis最佳实践:提升数据库交互效率的秘密武器
数据库·mybatis