JDBC编程详细总结

devtools/2024/9/23 19:27:13/

一、JDBC编程

JDBC编程有标准步骤(八股文)

  • 注册驱动

    • 将sql语句的运行环境加载到JVM

  • 连接数据库

  • 获得执行SQL的对象

  • 执行SQL语句,获得结果

  • 关流

1、 注册驱动

java">Class.forName("com.mysql.jdbc.Driver");//5.7版本 加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");//5.8版本 加载驱动

2、 连接数据库

  • 通过 DriverManager.getConnection(url,user,password) 获取数据库连接对象

    • URL:jdbc:mysql://localhost:3306/database

      • ?useUnicode=true&characterEncoding=utf8 // 解决数据编码格式乱码

      • &useSSL=false // 解决执行时控制台红色警告

      • &serverTimezone=UTC // mysql8版本需要加时区

    • username:root

    • password:123456

java">Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名字?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC   ", "数据库用户名","数据库密码");
  • URL(Uniform Resource Locator) 统一资源定位符:由协议、IP、端口、SID(程序实例名称)组成

3、 获取发送 SQL 的对象

通过 Connection 对象获得 Statement 对象,用于对数据库进行通用访问。

java">Statement statement = conn.createStatement();

4、 执行SQL 语句

执行 SQL 语句并接收执行结果。

java">String sql ="INSERT INTO t_jobs(JOB_ID,JOB_TITLE,MIN_SALARY,MAX_SALARY) VALUES('JAVA_Le','JAVA_Lecturer',4000,10000);";
​
int result = statement.executeUpdate(sql);//执行SQL语句并接收结果
  • 注意:在编写 DML 语句时,一定要注意字符串参数的符号是单引号 '值'

  • DML 语句:增删改时使用executeUpdate(),返回受影响行数(int 类型)。

  • DQL 语句:查询时使用executeQuery(),返回结果数据(ResultSet 结果集)。

5、 处理结果

接受处理操作结果。

java">if(result > 0 ){System.out.println("Success");
}
  • 受影响行数:逻辑判断、方法返回。

  • 查询结果集:迭代、依次获取。

6、 释放资源

遵循先开后关原则,释放所使用到的资源对象。

java">statement.close();
conn.close();

7、 案例

准备数据库表,进行CRUD.

java">create table tb_user(id int(11) primary key auto_increment comment '用户编号',username varchar(10) comment '用户名',password varchar(10) comment '密码',phone varchar(11) comment '手机号',create_time date comment '注册时间',money double(10,2) comment '账户余额',sex int(1) comment '性别 1男2女'
);

需求: 使用JDBC完成对tb_user表插入数据

java">public class Demo2 {
​public static void main(String[] args) throws ClassNotFoundException, SQLException {// 1 加载驱动Class.forName("com.mysql.jdbc.Driver");
​// 2 获得连接// 通过驱动管理器获得连接String url = "jdbc:mysql://localhost:3306/java2401?useUnicode=true&characterEncoding=utf8&useSSL=false";// 协议://ip:端口/数据库?参数=值&参数=值// http://www.baidu.com:80/s?ie=UTF-8&wd=javaString username = "root";String password = "123456";Connection connection = DriverManager.getConnection(url, username, password);
​// 3 获得执行语句对象// 通过连接对象创建语句对象Statement statement = connection.createStatement( );
​// 4 执行sql获得结果// 通过语句对象执行sql,获得结果// 增删改都是更新,它们执行的结果都是受影响的行数int i = statement.executeUpdate("insert into tb_user values (3,'ww','123','120','2001-01-01',2000.0,2)");if (i > 0) {System.out.println("插入成功!" );}
​// 5 关闭连接statement.close();connection.close();}
​
}

二、完成增删改

1、 插入

参考入门案例

2、 更新

任何的JDBC都是那5个步骤.

java">public class Demo2_update {
​public static void main(String[] args) throws Exception {
​// 1 加载驱动Class.forName("com.mysql.jdbc.Driver");
​// 2 通过驱动管理对象获得连接对象String url = "jdbc:mysql://localhost:3306/java2311?useSSL=false";String username = "root";String password = "123456";Connection conn = DriverManager.getConnection(url, username, password);
​// 3 通过连接对象创建执行语句对象Statement statement = conn.createStatement( );
​// 4 通过执行语句对象执行sql,获得结果String sql = "update tb_user set username = '小孟', phone = '666666' where id = 3";int num = statement.executeUpdate(sql);
​if (num > 0) {System.out.println("更新成功!" );}// 5 将对象的流关闭statement.close();conn.close();}
}

3、 删除

java">public class Demo3_delete {
​public static void main(String[] args) {Statement statement = null;Connection conn = null;try {// 1 加载驱动Class.forName("com.mysql.jdbc.Driver");
​// 2 获得连接String url = "jdbc:mysql://localhost:3306/java2311?useSSL=false";String username = "root";String password = "123456";conn = DriverManager.getConnection(url, username, password);
​// 3 获得语句对象statement = conn.createStatement( );
​// 4 执行sqlint num = statement.executeUpdate("delete from tb_user where id = 3");
​if (num > 0) {System.out.println("删除成功" );}}catch (Exception e) {// 如果有异常,要打印出来,因为要根据异常解决问题e.printStackTrace();} finally {try {// 5 关闭连接statement.close( );conn.close( );}catch (SQLException e) {e.printStackTrace();}}}
}

三、查询结果集ResultSet【重要】

查询返回的是一种虚拟表,Java的JDBC中是使用结果集(ResultSet)来封装这个虚拟表,结果集就是一个集合,内部就存储了列名和每行数据,那么学习查询的重点是

  • 从结果集取值

java">public class Demo4_select {public static void main(String[] args) throws Exception{
​Class.forName("com.mysql.jdbc.Driver");Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/java2311?useSSL=false", "root", "123456");Statement statement = conn.createStatement( );/*** 执行查询方法 executeQuery()* 返回值是 ResultSet 结果集,其中就包含查询返回的所有数据(一张虚拟表)* ResultSet结果集中包含列和行数据,其中有个光标指向表头* next() 方法会向下移动一行,返回boolean,为true即有下一行数据,false该行没数据* 当指向该行后,有方法可以获取该行列值* getXxx()   ps:xxx是各种数据类型* getXxx(String columnLabel) 通过列名取值,如果有别名要使用别名*/String sql = "select birthday,money,username,password,id,sex,age from tb_user";ResultSet rs = statement.executeQuery(sql);while (rs.next()){int id = rs.getInt("id");String username = rs.getString("username");String password = rs.getString("password");String sex = rs.getString("sex");int age = rs.getInt("age");Date birthday = rs.getDate("birthday");double money = rs.getDouble("money");System.out.println(id+"-"+username+"-"+password+"-"+sex+"-"+age+"-"+birthday+"-"+money);}rs.close();statement.close();conn.close();}
}

image-20221121164359945


http://www.ppmy.cn/devtools/116140.html

相关文章

无线安全(WiFi)

免责声明:本文仅做分享!!! 目录 WEP简介 WPA简介 安全类型 密钥交换 PMK PTK 4次握手 WPA攻击原理 网卡选购 攻击姿态 1-暴力破解 脚本工具 字典 2-Airgeddon 破解 3-KRACK漏洞 4-Rough AP 攻击 5-wifi钓鱼 6-wifite 其他 WEP简介 WEP是WiredEquivalentPri…

AutoGen Function Call 函数调用解析(二)

AutoGen Function Call 函数调用解析(二) import os from autogen import ConversableAgent, register_function, config_list_from_json# 配置LLM config_list config_list_from_json(env_or_file"OAI_CONFIG_LIST", )player_white_config_…

如何有效检测住宅IP真伪?

在当今的互联网时代,住宅IP(即家庭用户通过宽带服务提供商获得的IP地址)在跨境电商、广告投放、网络安全等多个领域扮演着重要角色。然而,随着网络环境的复杂化和欺诈行为的增多,如何有效检测和辨别住宅IP的真伪成为了…

如何使用ant design vue的a-select下拉框,实现既能输入内容,也可以下拉选择的效果,apiselect同样适用

修改mode 强烈推荐 代码如下&#xff0c;重点在search和mode <ApiSelectv-if"editableData[record.key]"mode"SECRET_COMBOBOX_MODE_DO_NOT_USE"search"inputinspect":api"problem":params"{projectId:projectId}"showS…

计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-22

计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-22 引言: 全球最热销的国产游戏-《黑神话: 悟空》不仅给世界各地玩家们带来愉悦&#xff0c;而且对计算机人工智能研究也带来新的思考。在本期的论文速读中&#xff0c;我们带来一篇关于视觉语言模型&#xff0…

【觅图网-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

Python_str(x)_x.str.something区别

str(x)&#xff1a; 这是一个Python内置函数&#xff0c;用于将对象x转换为字符串类型。 可以接受任何数据类型的对象作为输入&#xff08;如整数、浮点数、列表、元组等&#xff09;&#xff0c;并返回一个合理的字符串表示。 例&#xff1a;str(123) 会返回 ‘123’&#xff…

go 接口

go接口接口类型接口的定义 实现接口的条件 为什么要使用接口&#xff1f;### 面向接口编程### 接口类型变量 值接收者和指针接收者 修改能力性能考虑适用场景接口实现类型与接口的关系优势go并不存在传统意义上的“菱形继承”问题多种类型实现同一接口一个接口的所有方法&#…