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();
    }
}

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

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

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

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

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

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

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

相关推荐
瓜牛_gn36 分钟前
mysql特性
数据库·mysql
奶糖趣多多2 小时前
Redis知识点
数据库·redis·缓存
CoderIsArt3 小时前
Redis的三种模式:主从模式,哨兵与集群模式
数据库·redis·缓存
师太,答应老衲吧5 小时前
SQL实战训练之,力扣:2020. 无流量的帐户数(递归)
数据库·sql·leetcode
Yaml46 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
Channing Lewis6 小时前
salesforce case可以新建一个roll up 字段,统计出这个case下的email数量吗
数据库·salesforce
追风林6 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker
毕业设计制作和分享7 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
ketil277 小时前
Redis - String 字符串
数据库·redis·缓存
Hsu_kk8 小时前
MySQL 批量删除海量数据的几种方法
数据库·mysql