jdbc原理

JDBC

JDBC 就是使用 Java 语言操作关系型数据库的一套 API

快速入门

//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2. 获取连接对象
String url = "jdbc:mysql://127.0.0.1:3306/db1?useSSL=false";
String username = "root";
String password = "1234";
Connection conn = DriverManager.getConnection(url, username, password);
//3. 定义SQL
String sql = "update account set money = 2000 where id = 1";
//4. 获取执行sql的对象
Statement stmt = conn.createStatement();
//5.执行sql
int count = stmt.executeUpdate(sql);
//6.处理结果
//System.out.println(count);
//7. 释放资源
stmt.close();
conn.close();

JDBC 概念:

  • JDBC 就是使用 Java 语言操作关系型数据库的一套 API
  • 全称:(Java DataBase Connectivity) Java 数据库连接

JDBC 本质:

  • 官方(sun 公司)定义的一套操作所有关系型数据库的规则,即接口
  • 各个数据库厂商去实现这套接口,提供数据库驱动 jar 包
  • 我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动 jar 包中的实现类

JDBC 好处:

  • 各数据库厂商使用相同的接口,Java 代码不需要针对不同数据库分别开发
  • 可随时替换底层数据库,访问数据库的 Java 代码基本不变

在这里插入图片描述

DriverManager

用法

Connection conn = DriverManager.getConnection(url, username, password);

获取连接

static Connection getConnection(String url, String user, String password)

参数

  1. url: 连接路径
  • 语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2...
  • 示例:jdbc:mysql://127.0.0.1:3306/db1
  • 细节:
    • 如果连接的是本机 mysql 服务器,且 mysql 服务默认端口是 3306,则 url 可简写为:jdbc:mysql:///数据库名称?参数键值对
    • 配置useSSL=false参数,禁用安全连接方式,解决警告提示

​ 2.user: 用户名

​ 3.password: 密码

作用

  1. 注册驱动
  2. 获取数据库连接

Connection

作用:

  1. 获取执行 SQL 的对象
  2. 管理事务

获取执行 SQL 的对象

Statement stmt = conn.createStatement();

普通执行 SQL 对象

Statement createStatement()

预编译 SQL 的执行 SQL 对象:防止 SQL 注入

PreparedStatement prepareStatement (sql)

① 获取 PreparedStatement 对象

// SQL语句中的参数值,使用?占位符替代
String sql = "select * from user where username = ? and password = ?";
// 通过Connection对象获取,并传入对应的sql语句
PreparedStatement pstmt = conn.prepareStatement(sql);

② 设置参数值

PreparedStatement对象: setXxx(参数1, 参数2): 给?赋值
  • Xxx:数据类型;如 setInt (参数 1, 参数 2)
  • 参数:
    • 参数 1:? 的位置编号,从 1 开始
    • 参数 2:? 的值

③ 执行 SQL

executeUpdate(); / executeQuery();:不需要再传递sql

补充原理:

在这里插入图片描述

执行存储过程的对象

CallableStatement prepareCall (sql)

事务管理

MySQL 事务管理

  • 开启事务:BEGIN; / START TRANSACTION;
  • 提交事务:COMMIT;
  • 回滚事务:ROLLBACK;
  • MySQL 默认自动提交事务

JDBC 事务管理(Connection 接口方法)

  • 开启事务:

    setAutoCommit(boolean autoCommit)
    
    • true:自动提交事务;false:手动提交事务(即开启事务)
  • 提交事务:commit()

  • 回滚事务:rollback()

Statement

作用:

执行 SQL 语句

执行 SQL 语句:

  1. int executeUpdate(sql):执行 DML(增、删、改)、DDL 语句(CREATE(创建表 / 库)、ALTER(修改表结构)、DROP(删除表 / 库))
    • 返回值:
      • (1)DML 语句影响的行数
      • (2)DDL 语句执行后,执行成功也可能返回 0
  2. ResultSet executeQuery(sql):执行 DQL 语句
    • 返回值:ResultSet 结果集对象

ResultSet (结果集对象)

作用:

  1. 封装了 DQL 查询语句的结果
    • ResultSet stmt.executeQuery(sql):执行 DQL 语句,返回 ResultSet 对象

获取查询结果的方法:

  1. boolean next()
    • 作用:(1)将光标从当前位置向前移动一行;(2)判断当前行是否为有效行
    • 返回值:
      • true:有效行,当前行有数据
      • false:无效行,当前行没有数据
  2. xxx getXxx(参数):获取数据
    • xxx:数据类型,如 int getInt(参数)String getString(参数)
    • 参数:
      • int:列的编号,从 1 开始
      • String:列的名称

使用方法

//1. 注册驱动
//Class.forName("com.mysql.jdbc.Driver");
//2. 获取连接: 如果连接的是本机mysql并且端口是默认的3306 可以简化书写
String url = "jdbc:mysql:///db1?useSSL=false";
String username = "root";
String password = "1234";
Connection conn = DriverManager.getConnection(url, username, password);

//3. 定义sql
String sql = "select * from account";

//4. 获取statement对象
Statement stmt = conn.createStatement();

//5. 执行sql
ResultSet rs = stmt.executeQuery(sql);

//6. 处理结果,遍历rs中的所有数据
// 6.1 光标向下移动一行,并且判断当前行是否有数据
while (rs.next()){
    //6.2 获取数据 getXxx()
    int id = rs.getInt(1);
    String name = rs.getString(2);
    double money = rs.getDouble(3);
}

数据库连接池

简介

在这里插入图片描述

  • 标准接口:DataSource

    • 官方(SUN)提供的数据库连接池标准接口,由第三方组织实现此接口。

    • 功能:获取连接

      java

  • Connection getConnection()
    

常见的数据库连接池:

  • DBCP
  • C3P0
  • Druid

Druid (德鲁伊)

  • Druid 连接池是阿里巴巴开源的数据库连接池项目
  • 功能强大,性能优秀,是 Java 语言最好的数据库连接池之一

用法

  1. 导入 jar 包 druid-1.1.12.jar
  2. 定义配置文件
  3. 加载配置文件
  4. 获取数据库连接池对象
  5. 获取连接

配置文件信息

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///db1?useSSL=false&useServerPrepStmts=true
username=root
password=1234
# 初始化连接数量
initialSize=5
# 最大连接数
maxActive=10
# 最大等待时间
maxWait=3000
//3. 加载配置文件
Properties prop = new Properties();
prop.load(new FileInputStream("jdbc-demo/src/druid.properties"));
//4. 获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);

//5. 获取数据库连接 Connection
Connection connection = dataSource.getConnection();

System.out.println(connection);

//System.out.println(System.getProperty("user.dir"));

内容概要:本文介绍了一种基于蒙特卡洛模拟和拉格朗日优化方法的电动汽车充电站有序充电调度策略,重点针对分时电价机制下的分散式优化问题。通过Matlab代码实现,构建了考虑用户充电需求、电网负荷平衡及电价波动的数学模【电动汽车充电站有序充电调度的分散式优化】基于蒙特卡诺和拉格朗日的电动汽车优化调度(分时电价调度)(Matlab代码实现)型,采用拉格朗日乘子法处理约束条件,结合蒙特卡洛方法模拟大量电动汽车的随机充电行为,实现对充电功率和时间的优化分配,旨在降低用户充电成本、平抑电网峰谷差并提升充电站运营效率。该方法体现了智能优化算法在电力系统调度中的实际应用价值。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事新能源汽车、智能电网相关领域的工程技术人员。; 使用场景及目标:①研究电动汽车有序充电调度策略的设计与仿真;②学习蒙特卡洛模拟与拉格朗日优化在能源系统中的联合应用;③掌握基于分时电价的需求响应优化建模方法;④为微电网、充电站运营管理提供技术支持和决策参考。; 阅读建议:建议读者结合Matlab代码深入理解算法实现细节,重点关注目标函数构建、约束条件处理及优化求解过程,可尝试调整参数设置以观察不同场景下的调度效果,进一步拓展至多目标优化或多类型负荷协调调度的研究。
Sh-JDBC是一个基于JDBC的分库分表中间件,它的实现原理主要包括以下几个方面: 1. 架构:Sharding-JDBC采用了经典的分片模型,主要包含三个组件:客户端、中间件、数据库。客户端通过JDBC连接访问中间件,中间件负责解析SQL语句,对数据进行分片处理后,将请求转发给相应的数据库进行处理。 2. 核心概念:Sharding-JDBC中定义了一些核心概念,包括分片规则、分片算法、分片键、广播表等。分片规则定义了数据在不同数据库中的分布规则;分片算法定义了数据如何进行分片计算;分片键是用于进行数据分片的列;广播表是指在所有分片数据库中都存在的表。 3. 写操作:对于写操作,Sharding-JDBC通过分片规则将数据分散到多个数据库中的相应分片表中,保证了数据的均匀分布和负载均衡。例如,根据分片规则将用户数据根据用户ID的范围分散到不同的数据库中的用户表中。 4. 读操作:对于读操作,Sharding-JDBC通过分片键和广播表的方式,将查询请求发送到所有的分片数据库,并将结果合并后返回给客户端。例如,在查询用户数据时,Sharding-JDBC会将查询请求发送到所有的用户分片表,并将结果进行合并后返回给客户端。 综上所述,Sharding-JDBC通过解析SQL语句、分片规则和分片算法,实现了对数据的分库分表操作,同时保证了数据的一致性和高性能。这使得开发人员可以简化分库分表的实现逻辑,提高系统的可伸缩性和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值