JDBC
时间:2019-09-03
本文章向大家介绍JDBC,主要包括JDBC使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
第一章 JDBC的快速入门
1.1 概念
- java database connection,Java数据库连接(用Java语言操作数据库)。
1.2 JDBC的本质
- 官方(SUN公司)定义了操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动的jar包。我们可以使用这套接口(JDBC)编程,真正执行代码的是驱动jar包中的实现类。
1.3 快速入门
- 驱动的maven坐标:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.48</version> </dependency>
- 示例:
package com.sunxiaping.jdbc; import java.sql.*; public class QuickStart { public static void main(String[] args) throws ClassNotFoundException, SQLException { //注册驱动 Class.forName("com.mysql.jdbc.Driver"); //获取连接 String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false"; String user = "root"; String password = "123456"; Connection connection = DriverManager.getConnection(url, user, password); //定义SQL语句 String sql = " select id,name from employee "; //获取执行SQL的对象 PreparedStatement preparedStatement = connection.prepareStatement(sql); ResultSet rs = preparedStatement.executeQuery(); while (rs.next()) { int id = rs.getInt(1); String name = rs.getString(2); System.out.println(id); System.out.println(name); } //释放资源 if (connection != null) { connection.close(); } } }
第二章 JDBC各个类详解
2.1 DriverManager
- 驱动管理对象。
- 作用:
- ①注册驱动。
public static synchronized void registerDriver(java.sql.Driver driver){}
- ②获取数据库连接对象。
public static Connection getConnection(String url, String user, String password) throws SQLException {}
2.2 Connection
- 数据库连接对象。
- 作用:
- ①获取执行SQL的对象。
- 获取Statement对象:
Statement createStatement() throws SQLException;
-
- 获取PreparedStatement对象:
PreparedStatement prepareStatement(String sql);
- ②管理事务。
- 开启或关闭自动提交。
void setAutoCommit(boolean autoCommit) throws SQLException;
-
- 提交事务。
void commit() throws SQLException;
-
- 回滚事务。
void rollback() throws SQLException;
2.3 Statement
- 执行静态SQL的对象。
- 执行DML或DDL语句:
int executeUpdate(String sql) throws SQLException;
- 执行DQL语句:
ResultSet executeQuery(String sql) throws SQLException;
2.4 ResultSet
- 结果集对象,封装查询结果。
- 游标向下移动一行:
boolean next() throws SQLException;
- 获取数据:
Xxx getXxx(int columnIndex) throws SQLException; // cloumnIndex代表列的编号,从1开始
Xxx getXxx(String columnLabel) throws SQLException; //cloumnLable代表列的名称
2.5 PreparedStatement
- 执行预编译SQL的对象。
- 可以用来解决SQL注入问题。
- 示例:
package com.sunxiaping.jdbc; import java.sql.*; public class QuickStart { public static void main(String[] args) throws ClassNotFoundException, SQLException { //注册驱动 Class.forName("com.mysql.jdbc.Driver"); //获取连接 String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false"; String user = "root"; String password = "123456"; Connection connection = DriverManager.getConnection(url, user, password); //定义SQL语句 String sql = " select id ,`name` from employee where id = ? "; PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, 1); ResultSet resultSet = preparedStatement.executeQuery(); while (resultSet.next()) { int id = resultSet.getInt(1); String name = resultSet.getString(2); System.out.println("id:" + id + ",name=" + name); } if (connection != null) { connection.close(); } } }
第三章 JDBC之CRUD
3.1 增加
- 示例:
package com.sunxiaping.jdbc; import java.sql.*; public class QuickStart { public static void main(String[] args) throws ClassNotFoundException, SQLException { //注册驱动 Class.forName("com.mysql.jdbc.Driver"); //获取连接 String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false"; String user = "root"; String password = "123456"; Connection connection = DriverManager.getConnection(url, user, password); //定义SQL语句 String sql = " insert into employee (name) values ('zhangsan') "; Statement statement = connection.createStatement(); int count = statement.executeUpdate(sql); System.out.println(count); if (connection != null) { connection.close(); } } }
3.2 更新
- 示例:
package com.sunxiaping.jdbc; import java.sql.*; public class QuickStart { public static void main(String[] args) throws ClassNotFoundException, SQLException { //注册驱动 Class.forName("com.mysql.jdbc.Driver"); //获取连接 String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false"; String user = "root"; String password = "123456"; Connection connection = DriverManager.getConnection(url, user, password); //定义SQL语句 String sql = " update employee set name = 'xuweiwei' where id = 1 "; Statement statement = connection.createStatement(); int count = statement.executeUpdate(sql); System.out.println(count); if (connection != null) { connection.close(); } } }
3.3 删除
- 示例:
package com.sunxiaping.jdbc; import java.sql.*; public class QuickStart { public static void main(String[] args) throws ClassNotFoundException, SQLException { //注册驱动 Class.forName("com.mysql.jdbc.Driver"); //获取连接 String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false"; String user = "root"; String password = "123456"; Connection connection = DriverManager.getConnection(url, user, password); //定义SQL语句 String sql = " delete from employee where id = 5 "; Statement statement = connection.createStatement(); int count = statement.executeUpdate(sql); System.out.println(count); if (connection != null) { connection.close(); } } }
3.4 DDL
- 示例:
package com.sunxiaping.jdbc; import java.sql.*; public class QuickStart { public static void main(String[] args) throws ClassNotFoundException, SQLException { //注册驱动 Class.forName("com.mysql.jdbc.Driver"); //获取连接 String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false"; String user = "root"; String password = "123456"; Connection connection = DriverManager.getConnection(url, user, password); //定义SQL语句 String sql = " create table student(id int primary key ,name varchar (255)) "; Statement statement = connection.createStatement(); int count = statement.executeUpdate(sql); System.out.println(count); if (connection != null) { connection.close(); } } }
第四章 事务管理
4.1 概述
- 一个包含多个步骤的业务操作。如果这个业务操作被事务管理,那么这多个步骤要么同时成功,要么同时失败。
4.2 步骤
- 开启事务。
- 提交事务。
- 回滚事务。
4.3 应用示例
- 示例:
CREATE TABLE `account` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `money` double NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) INSERT INTO `account` VALUES (1, '张三', 1000); INSERT INTO `account` VALUES (2, '李四', 1000);
package com.sunxiaping.jdbc; import java.sql.*; public class QuickStart { public static void main(String[] args) { Connection connection = null; PreparedStatement preparedStatement = null; try { //注册驱动 Class.forName("com.mysql.jdbc.Driver"); //获取连接 String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false"; String user = "root"; String password = "123456"; connection = DriverManager.getConnection(url, user, password); connection.setAutoCommit(false); String sql = " update account set money = money - 500 where id = ? "; preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, 1); int count = preparedStatement.executeUpdate(); sql = " update account set money = money + 500 where id = ? "; preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, 2); //设置异常 int num = 1 / 0 ; count = preparedStatement.executeUpdate(); connection.commit(); } catch (Exception e) { e.printStackTrace(); if (null != connection) { try { connection.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } } } finally { if (null != preparedStatement) { try { preparedStatement.close(); } catch (SQLException e) { e.printStackTrace(); } } if (null != connection) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } } }
第五章 数据库连接池
5.1 概述
- 数据库连接池就是一个容器(集合),存放数据库连接的容器。
- 当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库的时候,从容器中获取连接对象,当用户访问完之后,会将连接对象归还给容器。
5.2 好处
第六章 JDBC Template
原文地址:https://www.cnblogs.com/xuweiweiwoaini/p/11456092.html
- 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该...
- Linux 系统与数据库安全
- 这或许是对小白最友好的python入门了吧——12,列表深入体验
- 初识SqlLite ---.net连接数据库
- 【实践操作】:六步教你如何用开源框架Tensorflow对象检测API构建一个玩具检测器
- 这或许是对小白最友好的python入门了吧——11,if语句初体验
- 你的网站做好神马搜索优化了吗?神马搜索站长工具提交
- 应用程序的通信成本
- 这或许是对小白最友好的python入门了吧——18,定义函数
- 【深度学习】图片风格转换应用程序:使用CoreML创建Prisma
- 压力测试中存在的问题
- 这或许是对小白最友好的python入门了吧——18,用while循环处理列表
- 如何在js中将统计代码图标隐藏
- 警惕IT黑洞
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- IntelliJ IDEA 构建 Maven 多模块工程项目
- GDP越高就越幸福吗?用Python分析《世界幸福指数报告》后我们发现…
- 图解:什么是哈希?
- 【Python基础】一文看懂 Pandas 中的透视表
- 彻底干掉恶心的 SQL 注入漏洞, 一网打尽!
- 某小型公司持续集成工具 Jenkins 实践
- 使用RBAC Impersonation简化Kubernetes资源访问控制
- 求求你别再用 MySQL offset 和 limit 分页了?
- 短视频带货源码,获取购物车中所有商品列表并加载显示
- 【Flutter 实战】菜单(Menu)功能
- 【Flutter 实战】路由堆栈详解
- 【Flutter 实战】全局监听路由堆栈变化
- 数据挖掘从入门到放弃:线性回归和逻辑回归
- 【Flutter 实战】文件系统目录
- 【原创】Spring Boot终极篇《上》