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

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

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

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

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

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

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

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

相关推荐
建投数据43 分钟前
建投数据与腾讯云数据库TDSQL完成产品兼容性互认证
数据库·腾讯云
Hacker_LaoYi2 小时前
【渗透技术总结】SQL手工注入总结
数据库·sql
岁月变迁呀2 小时前
Redis梳理
数据库·redis·缓存
独行soc2 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
你的微笑,乱了夏天2 小时前
linux centos 7 安装 mongodb7
数据库·mongodb
工业甲酰苯胺3 小时前
分布式系统架构:服务容错
数据库·架构
独行soc4 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘
White_Mountain4 小时前
在Ubuntu中配置mysql,并允许外部访问数据库
数据库·mysql·ubuntu
Code apprenticeship4 小时前
怎么利用Redis实现延时队列?
数据库·redis·缓存
百度智能云技术站4 小时前
广告投放系统成本降低 70%+,基于 Redis 容量型数据库 PegaDB 的方案设计和业务实践
数据库·redis·oracle