JDBC

概念:Java DataBase Connectivity,Java数据库连接,也就是用Java语言操作数据库。
JDBC本质:是官方定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动 jar 包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动 jar 包中的实现类。
点击这里下载驱动 jar 包,提取码:r60s
复制 jar 包,可以在你的工程文件新建一个名为 libs 的包,将文件粘贴进去,右键,找到 Add as Library ,如下图:

如何实现?

步骤:

  1. 导入驱动 jar 包
  2. 注册驱动
  3. 获取数据库连接对象 Connection
  4. 定义sql
  5. 获取执行sql语句的对象 Statement
  6. 执行sql,接收返回结果
  7. 处理结果
  8. 释放资源

代码实现:

public class JDBCDemo01 {public static void main(String[] args) throws Exception {// 1.导入驱动jar包// 2.注册驱动Class.forName("com.mysql.jdbc.Driver");// 3.获取数据库连接对象// localhost:3306 本机端口号为3306的程序,默认为此,可以省略// companydb 数据库名Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/companydb", "root", "1234");// 4.定义sql语句String sql = "update food set foodKind = 'miantiao' where foodId = 1";// 5.获取执行sql的对象,StatementStatement stmt = conn.createStatement();// 6.执行sql,返回值count是影响的行数。int count = stmt.executeUpdate(sql);// 7.处理结果System.out.println(count);// 8.释放资源conn.close();stmt.close();}

注意:这里导入的驱动 jar 包要和安装的 MySQL 的版本一致,否则会报错。
快斗安装的 MySQL 是8 . 多版本的,刚开始导入了5 . 多版本的驱动 jar 包,后来发现需要版本一致,就把驱动 jar 包换成了8 . 多的,但是还是报错,经过一番折腾,发现代码也是需要改的。在这里把能正常运行的代码贴上:

// 2.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 3.获取数据库连接对象
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/companydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8", "root", "1234");

认识这些对象:

  1. DriverManager:驱动管理对象

功能:

  1. 注册驱动:告诉程序应该使用哪一个数据库驱动 jar
    static void registerDriver(Driver driver):注册与给定的驱动程序DriverManager。
  2. 获取数据库连接
    static Connection getConnection(String url, String user, String passward)
    参数:
    url:指定连接的路径。语法:jdbc:mysql://ip地址(域名):端口号/数据库名。如果连接的是本机MySQL服务器,并且MySQL服务默认端口是3306,则url可以简写为jdbc:mysql:///数据库名。
    user:用户名
    password:密码
  1. Connection:数据库连接对象

功能:

  1. 获取执行sql的对象
    Statement createStatement()
    PreparedStatement preparedStatement(String sql)
  2. 管理事务
  1. Statement:执行sql的对象

功能:执行sql

  1. boolean execute(String sql):可以执行任意的sql
  2. int executeUpdate(String sql):执行DML(insert,update,delete) 语句、DDL(create,alter,drop)语句。返回值:影响的行数,可以通过这个影响的行数判断DML语句执行是否成功,返回值大于0代表成功,反之,则失败。
  3. ResultSet executeQuery(String sql):执行DQL(select)语句。
  1. ResultSet:结果集对象,封装查询结果
  1. next():游标向下移动一行
  2. getXxx():获取数据。Xxx 代表数据类型,如:getInt(),getString()
    参数:int:代表列的编号,从1开始
    String:代表列名称

JDBC练习

  1. insert
public class JDBCDemo2 {public static void main(String[] args) {Connection conn = null;Statement stmt = null;try {// 1 注册驱动Class.forName("com.mysql.cj.jdbc.Driver");// 2 定义sql语句String sql = "insert into food values(4,'mantou','2')";// 3 获取Connection对象conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/companydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8", "root", "root");// 4 获取Statement对象stmt = conn.createStatement();// 5 执行sql语句int count = stmt.executeUpdate(sql);// 6 处理结果System.out.println(count);if (count > 0) {System.out.println("操作成功!");} else {System.out.println("操作失败!");}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} finally {// 7 释放资源// 对于stmt,如果获取connection对象那一行出错了,就不会执行到stmt,就是赋值时候的null,会空指针异常,所以if (stmt != null) {try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}
}
  1. update
// 只用将上面添加数据的sql语句改成更新的sql语句即可。
// 2 定义sql语句
String sql = "update food set foodPrice = 3 where foodId = 3";
  1. DDL之delete
public class JDBCDemo4 {public static void main(String[] args) {Connection conn = null;Statement stmt = null;try {// 1 注册驱动Class.forName("com.mysql.cj.jdbc.Driver");// 2 定义sql语句String sql = "delete from food where foodId = 4";// 3 获取Connection对象conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/companydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8", "root", "root");// 4 获取statement对象stmt = conn.createStatement();// 5 执行sql语句int count = stmt.executeUpdate(sql);// 6 处理结果System.out.println(count);if (count > 0) {System.out.println("操作成功!");} else {System.out.println("操作失败!");}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} finally {// 7 释放资源if (stmt != null) {try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}
}
  1. DDL之create 创建一张表
// 只用将上面delete的sql语句改成create的语句即可
// 2 定义sql语句String sql = "create table student (id int ,name varchar (20))";

使用 ResultSet 获取 select 到的结果集

public class JDBCDemo7 {public static void main(String[] args) {Connection conn = null;Statement stmt = null;ResultSet rs = null;try {// 1 注册驱动Class.forName("com.mysql.cj.jdbc.Driver");// 2 定义sql语句String sql = "select * from food";// 3 connection对象conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/companydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8", "root", "root");// 4 statement对象stmt = conn.createStatement();// 5 执行sql语句rs = stmt.executeQuery(sql);// 5.1 让游标下移while (rs.next()) {// 循环判断光标是否在表最后一行的末尾,如果不是进入循环,取值;否则结束// 获取数据// 5.2 获取数据int id = rs.getInt(1);String kind = rs.getString(2);int price = rs.getInt("foodPrice");System.out.println(id + "---" + kind + "---" + price);}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} finally {if (rs != null) {try {rs.close();} catch (SQLException e) {e.printStackTrace();}}if (stmt != null) {try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}
}

JDBC工具类

由于每次都要注册驱动,建立连接,释放资源等等,我们可以写一个工具类,以简化代码。对于每次建立连接时都要传入的参数 url,username,password,我们应该使用配置文件的方式,即将这些参数放入另外的一个文件中,在 src 包下新建 jdbc.properties 文件。如果想让改变连接,只用改变配置文件即可,无需改变代码。

public class JDBCUtils {private static String url;private static String user;private static String password;private static String driver;// 文件的读取,只需要读取一次就可以拿到这些值,使用静态代码块static {try {// 创建Properties集合类Properties prop = new Properties();// 动态获取src下的文件路径ClassLoader classLoader = JDBCUtils.class.getClassLoader();URL res = classLoader.getResource("jdbc");String path = res.getPath();System.out.println(path);// 加载文件prop.load(new FileReader(path));// 获取属性url = prop.getProperty("url");user = prop.getProperty("user");password = prop.getProperty("password");driver = prop.getProperty("driver");// 注册驱动Class.forName(driver);} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}}// 注册驱动// 建立连接public static Connection getConnection() throws SQLException {return DriverManager.getConnection(url, user, password);}// 方法重载public static void close(Statement stmt, Connection conn) {if (stmt != null) {try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}public static void close(ResultSet rs, Statement stmt, Connection conn) {if (stmt != null) {try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}if (rs != null) {try {rs.close();} catch (SQLException e) {e.printStackTrace();}}}
}

那么我们写好这个工具类之后,再进行之前的update等操作就会很简单了:

public class JDBCDemo11 {public static void main(String[] args) {Connection conn = null;Statement stmt = null;try {conn = JDBCUtils.getConnection();String sql = "update `account` set money = 10 where id = 1";stmt = conn.createStatement();int count = stmt.executeUpdate(sql);System.out.println(count);} catch (SQLException e) {e.printStackTrace();} finally {JDBCUtils.close(stmt, conn);}}
}

JDBC控制事务

事务:一个包含多个步骤的业务操作。如果这个业务操作被事务管理,则这多个步骤要么同时成功,要么同时失败。

操作:

  1. 开启事务:setAutoCommit(boolean autoCommit):调用该方法设置参数为false,即开启事务。在执行 sql 之前开启事务
  2. 提交事务:commit()。当所有 sql 都执行完提交事务。
  3. 回滚事务:rollback()。在 catch() 回滚事务。

代码实现:

public class JDBCDemo10 {public static void main(String[] args) {Connection conn = null;PreparedStatement pstmt1 = null;PreparedStatement pstmt2 = null;try {// 获取连接conn = JDBCUtils.getConnection();// 开启事务conn.setAutoCommit(false);// 定义sqlString sql1 = "update account set money = money - ? where id = ?";String sql2 = "update account set money = money + ? where id = ?";// 获取执行sql对象pstmt1 = conn.prepareStatement(sql1);pstmt2 = conn.prepareStatement(sql2);// 给?赋值pstmt1.setInt(1, 500);pstmt1.setInt(2, 1);pstmt2.setInt(1 ,500);pstmt2.setInt(2 ,2);// 更新数据pstmt1.executeUpdate();// 手动制造一个异常int i = 3 / 0;pstmt2.executeUpdate();// 以上代码执行都没有问题,提交事务conn.commit();} catch (Exception e) {// 不管在上面出现什么异常,都会到catch里面去// 所以在这里回滚事务try {if (conn != null) {conn.rollback();}} catch (SQLException ex) {ex.printStackTrace();}e.printStackTrace();} finally {JDBCUtils.close(pstmt1, conn);JDBCUtils.close(pstmt2, null);}}
}

我是快斗,请多多指教!

什么是 JDBC ?相关推荐

  1. weblogic项目java.sql.SQLException: ORA-01861: 文字与格式字符串不匹配 at oracle.jdbc.....错误解决

    原因:数据源配置时间格式问题 解决方案: 1.进入weblogic控制台 2.左侧菜单栏选择Service- JDBC- Data Source 3.选择你的数据源,然后进入Configuration ...

  2. JDBC与数据库连接工具对比分析

    JDBC 使用步骤: 注册数据库驱动 通过DriverManager获取数据库连接 通过Connection对象获取Statement对象 使用Statement执行SQL语句 操作ResultSet ...

  3. JDBC简单操作步骤总结

    JDBC 操作步骤 1:加载数据库驱动 2:建立与数据库之间的连接 3:发送SQL语句 4:获取查询结果 5:使用完之后,应进行断开连接,减少服务器负担. frist 提前下载相关jar包,添加相应依 ...

  4. SpringBoot整合JDBC、整合Druid数据源详解教程

    目录 一.整合JDBC 1. 环境准备 1. 创建数据库 2. 创建SpringBoot项目 3. IDEA连接数据库 2. 编写数据库配置信息 3. 编写测试类测试 4. CRUD操作数据库 1. ...

  5. 2021年大数据Flink(十四):流批一体API Connectors JDBC

    目录 Connectors JDBC 代码演示 Connectors JDBC Apache Flink 1.12 Documentation: JDBC Connector 代码演示 package ...

  6. JDBC学习DayTwo

    一.利用反射及JDBC元数据编写通用的查询方法 1.ResultSetMetaData 定义:描述ResultSet的元数据对象,即从中可以获取到结果集中有多少列.列名是什么. 获取 ResultSe ...

  7. springboot-6-整合jdbc

    如果有整合jpa了, 那么在dao中直接, 不需要引入依赖 @Resource private JdbcTempalte jdbcTempalte; 如果没有的话, 就先在pom.xml中加入依赖 & ...

  8. JDBC连接MySQL数据库及演示样例

    JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术. 一.JDBC基础知识         JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...

  9. mysql和windows连接不上_问题-jdbc连接不上mysql,windows下开启两个mysql服务

    1.问题: 前两天安装了个php 环境- wamp,由于我自己电脑上本身带有 mysql的数据库,在安装完后,没有注意到,mysql已经指向了 刚安装好的wamp里的mysql .导致 之前的 mys ...

  10. 双表查询java代码_什么是JDBC?Java数据库连接性简介

    JDBC(Java数据库连接性)是Java API,用于管理与数据库的连接,发出查询和命令以及处理从数据库获得的结果集.JDBC在1997年作为JDK 1.1的一部分发布,是为Java持久层开发的首批 ...

最新文章

  1. 力扣(LeetCode)刷题,简单题(第8期)
  2. haproxy配置文件
  3. 一文读懂大数据平台——写给大数据开发初学者的话!
  4. android手势滑动——左右滑动效果实现
  5. DCMTK:生成内置的数据字典
  6. 使用PowerShell配置Microsoft Teams
  7. 浅谈AsyncLocal,我们应该知道的那些事儿
  8. uoj#38. 【清华集训2014】奇数国(线段树+数论)
  9. Windows平台自动登录telnet批处理文件
  10. oracle deul,C#引用传递
  11. PyTorch学习—8.模型创建步骤与nn.Module属性
  12. 如何阅读科研文献-------------一点思考与总结
  13. 杰里之echo 衰减系数调节【篇】
  14. 用excel绘制统计图表(清风建模学习笔记)
  15. oracle12c关闭cdb,oracle12c CDB与PDB 启动与关闭操作
  16. 2010 年全国大学生数学建模竞赛甘肃赛区 获奖情况
  17. 用css3 3d效果做一个立体盒子
  18. 程序员的工资高,到底程序员的工资有多高?那些你不了解的程序员
  19. 什么是大数据系统存储及管理?
  20. 单位1-Mbps、Kbps、bps、kb、mb及其换算和区别

热门文章

  1. 开发H5游戏练手, 黑暗堡垒-炼狱传奇H5 (一) 登陆界面开发
  2. 【量化投资】量化投资技术基础 ---- Python 急速入门
  3. 几种典型的立体匹配算法
  4. python中clear和clear()
  5. Kuerbernetes 1.11 二进制安装
  6. Hung-Yi Lee homework[7]: Network Compression
  7. python作业02
  8. PTA平台—数据结构(李详):顺序表参考答案
  9. strcat_s详解
  10. 推荐下 刘慈欣的《科学中的故事资源》