JDBC API
2022/5/5 23:14:06
本文主要是介绍JDBC API,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
JDBC API
一、DriverManager
1、注册驱动
DriverManager.registerDriver(new Driver());
registerDriver方法是用于注册驱动的,但是我们之前做的入门案例并不是这样写的。而是如下实现
Class.forName("com.mysql.jdbc.Driver");
我们查询MySQL提供的Driver类,看它是如何实现的,源码如下:
static { try { DriverManager.registerDriver(new Driver()); } catch (SQLException var1) { throw new RuntimeException("Can't register driver!"); } } //JVM加载类时会执行静态代码块;每个静态代码块只会被执行一次。
在该类中的静态代码块中已经执行了 DriverManager
对象的 registerDriver()
方法进行驱动的注册了,那么我们只需要加载 Driver
类,该静态代码块就会执行。而 Class.forName("com.mysql.jdbc.Driver");
就可以加载 Driver
类。
==提示:==
MySQL 5之后的驱动包,可以省略注册驱动的步骤
自动加载jar包中META-INF/services/java.sql.Driver文件中的驱动类
2、获取数据库连接
String url = "jdbc:mysql://localhost:3306/JDBCTest"; Connection connection = DriverManager.getConnection(url, "root", "123456");
参数说明:
-
url : 连接路径
语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2…
细节:
-
如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称?参数键值对
-
配置 useSSL=false 参数,禁用安全连接方式,解决警告提示
-
-
user :用户名
-
password :密码
二、Connection
1、获取执行对象
-
普通执行SQL对象
Statement statement = connection.createStatement();
-
预编译SQL的执行SQL对象:防止SQL注入
PreparedStatement prepareStatement(sql)
2、事务管理
-
开启事务
connection.setAutoCommit(false);
MySQL默认是自动提交事务。
true表示自动提交事务,false表示手动提交事务。而开启事务需要将该参数设为为false。
-
提交事务
connection.commit();
-
回滚事务
connection.rollback();
3、案例
package com.qianchen; import java.sql.*; /* 事务管理 */ public class JDBCTest02 { public static void main(String[] args) throws Exception { String url = "jdbc:mysql://localhost:3306/JDBCTest"; Connection connection = DriverManager.getConnection(url, "root", "123456"); String sql = "update `User` set `password`=110119 where `username`='李四'"; Statement statement = connection.createStatement(); try { //开启事务 connection.setAutoCommit(false); //执行sql //int a = 3/0;//设置错误,检验 connection.rollback(); int i = statement.executeUpdate(sql); System.out.println(i); //提交事务 connection.commit(); }catch (Exception e){ //如果出现错误,就回滚事务 connection.rollback(); } statement.close(); connection.close(); } }
三、Statement
1、执行DDL、DML语句
int i = statement.executeUpdate(sql);
2、执行DQL语句
ResultSet resultSet = statement.executeQuery(sql);
四、ResultSet
ResultSet对象提供了操作查询结果数据的方法,如下:
boolean next()
将光标从当前位置向下移动一行
判断当前行是否为有效行
方法返回值说明:
true : 有效行,当前行有数据
false : 无效行,当前行没有数据
xxx getXxx(参数):获取数据
xxx : 数据类型;如: int getInt(参数) ;String getString(参数)
参数
int类型的参数:列的编号,从1开始。不是行的编号!!!
String类型的参数: 列的名称
案例
package com.qianchen; import java.sql.*; /* ResultSet */ public class JDBCTest03 { public static void main(String[] args) throws Exception { String url = "jdbc:mysql://localhost:3306/JDBCTest"; Connection connection = DriverManager.getConnection(url, "root", "123456"); String sql = "select * from `User`"; Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery(sql); while (resultSet.next()){ /* //数字代表列的编号,不是行的编号!!! String username = resultSet.getString(1); int password = resultSet.getInt(2); System.out.println("username:"+username+"-->password:"+password); */ String username = resultSet.getString("username"); int password = resultSet.getInt("password"); System.out.println("username:"+username+"-->password:"+password); } resultSet.close(); statement.close(); connection.close(); } }
五、PreparedStatement
这篇关于JDBC API的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升