1.什么是JDBC

JDBC全称为:Java Data Base Connectivity,它是可以执行SQL语句的Java API

2.为什么我们要用JDBC

  • 市面上有非常多的数据库,本来我们是需要根据不同的数据库学习不同的API,sun公司为了简化这个操作,定义了JDBC API【接口】
  • sun公司只是提供了JDBC API【接口】,数据库厂商负责实现。
  • 对于我们来说,操作数据库都是在JDBC API【接口】上,使用不同的数据库,只要用数据库厂商提供的数据库驱动程序即可
  • 这大大简化了我们的学习成本

3.简单操作JDBC

步骤:

  1. 导入MySQL或者Oracle驱动包
  2. 装载数据库驱动程序
  3. 获取到与数据库连接
  4. 获取可以执行SQL语句的对象
  5. 执行SQL语句
  6. 关闭连接

  1. Connection connection = null;
  2. Statement statement = null;
  3. ResultSet resultSet = null;
  4. try {
  5. /*
  6. * 加载驱动有两种方式
  7. *
  8. * 1:会导致驱动会注册两次,过度依赖于mysql的api,脱离的mysql的开发包,程序则无法编译
  9. * 2:驱动只会加载一次,不需要依赖具体的驱动,灵活性高
  10. *
  11. * 我们一般都是使用第二种方式
  12. * */
  13. //1.
  14. //DriverManager.registerDriver(new com.mysql.jdbc.Driver());
  15. //2.
  16. Class.forName("com.mysql.jdbc.Driver");
  17. //获取与数据库连接的对象-Connetcion
  18. connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/zhongfucheng", "root", "root");
  19. //获取执行sql语句的statement对象
  20. statement = connection.createStatement();
  21. //执行sql语句,拿到结果集
  22. resultSet = statement.executeQuery("SELECT * FROM users");
  23. //遍历结果集,得到数据
  24. while (resultSet.next()) {
  25. System.out.println(resultSet.getString(1));
  26. System.out.println(resultSet.getString(2));
  27. }
  28. } catch (SQLException e) {
  29. e.printStackTrace();
  30. } catch (ClassNotFoundException e) {
  31. e.printStackTrace();
  32. } finally {
  33. /*
  34. * 关闭资源,后调用的先关闭
  35. *
  36. * 关闭之前,要判断对象是否存在
  37. * */
  38. if (resultSet != null) {
  39. try {
  40. resultSet.close();
  41. } catch (SQLException e) {
  42. e.printStackTrace();
  43. }
  44. }
  45. if (statement != null) {
  46. try {
  47. statement.close();
  48. } catch (SQLException e) {
  49. e.printStackTrace();
  50. }
  51. }
  52. if (connection != null) {
  53. try {
  54. connection.close();
  55. } catch (SQLException e) {
  56. e.printStackTrace();
  57. }
  58. }
  59. }

上面我们已经简单使用JDBC去查询数据库的数据了,接下来我们去了解一下上面代码用到的对象


4.Connection对象

客户端与数据库所有的交互都是通过Connection来完成的。

常用的方法:


  1. //创建向数据库发送sql的statement对象。
  2. createcreateStatement()
  3. //创建向数据库发送预编译sql的PrepareSatement对象。
  4. prepareStatement(sql)
  5. //创建执行存储过程的callableStatement对象
  6. prepareCall(sql)
  7. //设置事务自动提交
  8. setAutoCommit(boolean autoCommit)
  9. //提交事务
  10. commit()
  11. //回滚事务
  12. rollback()

5.Statement对象

Statement对象用于向数据库发送Sql语句,对数据库的增删改查都可以通过此对象发送sql语句完成。

Statement对象的常用方法:


  1. //查询
  2. executeQuery(String sql)
  3. //增删改
  4. executeUpdate(String sql)
  5. //任意sql语句都可以,但是目标不明确,很少用
  6. execute(String sql)
  7. //把多条的sql语句放进同一个批处理中
  8. addBatch(String sql)
  9. //向数据库发送一批sql语句执行
  10. executeBatch()

6.ResultSet对象

ResultSet对象代表Sql语句的执行结果,当Statement对象执行executeQuery()时,会返回一个ResultSet对象

ResultSet对象维护了一个数据行的游标【简单理解成指针】,调用ResultSet.next()方法,可以让游标指向具体的数据行,进行获取该行的数据

常用方法:


  1. //获取任意类型的数据
  2. getObject(String columnName)
  3. //获取指定类型的数据【各种类型,查看API】
  4. getString(String columnName)
  5. //对结果集进行滚动查看的方法
  6. next()
  7. Previous()
  8. absolute(int row)
  9. beforeFirst()
  10. afterLast()

7.写一个简单工具类

通过上面的理解,我们已经能够使用JDBC对数据库的数据进行增删改查了,我们发现,无论增删改查都需要连接数据库,关闭资源,所以我们把连接数据库,释放资源的操作抽取到一个工具类


  1. /*
  2. * 连接数据库的driver,url,username,password通过配置文件来配置,可以增加灵活性
  3. * 当我们需要切换数据库的时候,只需要在配置文件中改以上的信息即可
  4. *
  5. * */
  6. private static String driver = null;
  7. private static String url = null;
  8. private static String username = null;
  9. private static String password = null;
  10. static {
  11. try {
  12. //获取配置文件的读入流
  13. InputStream inputStream = UtilsDemo.class.getClassLoader().getResourceAsStream("db.properties");
  14. Properties properties = new Properties();
  15. properties.load(inputStream);
  16. //获取配置文件的信息
  17. driver = properties.getProperty("driver");
  18. url = properties.getProperty("url");
  19. username = properties.getProperty("username");
  20. password = properties.getProperty("password");
  21. //加载驱动类
  22. Class.forName(driver);
  23. } catch (IOException e) {
  24. e.printStackTrace();
  25. } catch (ClassNotFoundException e) {
  26. e.printStackTrace();
  27. }
  28. }
  29. public static Connection getConnection() throws SQLException {
  30. return DriverManager.getConnection(url,username,password);
  31. }
  32. public static void release(Connection connection, Statement statement, ResultSet resultSet) {
  33. if (resultSet != null) {
  34. try {
  35. resultSet.close();
  36. } catch (SQLException e) {
  37. e.printStackTrace();
  38. }
  39. }
  40. if (statement != null) {
  41. try {
  42. statement.close();
  43. } catch (SQLException e) {
  44. e.printStackTrace();
  45. }
  46. }
  47. if (connection != null) {
  48. try {
  49. connection.close();
  50. } catch (SQLException e) {
  51. e.printStackTrace();
  52. }
  53. }
  54. }

JDBC第一篇--【介绍JDBC、使用JDBC连接数据库、简单的工具类】的更多相关文章

  1. Java并发包下锁学习第一篇:介绍及学习安排

    Java并发包下锁学习第一篇:介绍及学习安排 在Java并发编程中,实现锁的方式有两种,分别是:可以使用同步锁(synchronized关键字的锁),还有lock接口下的锁.从今天起,凯哥将带领大家一 ...

  2. spring cloud系列教程第一篇-介绍

    spring cloud系列教程第一篇-介绍 前言: 现在Java招聘中最常见的是会微服务开发,微服务已经在国内火了几年了,而且也成了趋势了.那么,微服务只是指spring boot吗?当然不是了,微 ...

  3. 工具篇:介绍几个好用的guava工具类

    前言 平时我们都会封装一些处理缓存或其他的小工具.但每个人都封装一次,重复造轮子,有点费时间.有没有一些好的工具库推荐-guava.guava是谷歌基于java封装好的开源库,它的性能.实用性,比我们 ...

  4. Python+Selenium中级篇之8-Python自定义封装一个简单的Log类《转载》

    Python+Selenium中级篇之8-Python自定义封装一个简单的Log类: https://blog.csdn.net/u011541946/article/details/70198676

  5. JDBC【介绍JDBC、使用JDBC连接数据库、简单的工具类】

    1.什么是JDBC JDBC全称为:Java Data Base Connectivity,它是可以执行SQL语句的Java API 2.为什么我们要用JDBC 市面上有非常多的数据库,本来我们是需要 ...

  6. java核心技术第三篇之JDBC第一篇

    01.JDBC_两个重要的概念: 1).什么是数据库驱动程序:由数据库厂商提供,面向某种特定的编程语言所开发的一套访问本数据库的类库. 驱动包一般由两种语言组成,前端是:面向某种特定编程语言的语言:后 ...

  7. JDBC | 第一章: 快速开始使用JDBC连接Mysql数据库?

    开始使用基于java的JDBC技术来连接mysql进行msyql数据库简单的CRUD操作 下载对应mysql驱动包 这里我创建maven项目基于maven下载 <!--mysql 驱动--> ...

  8. JDBC的增删改写成一个方法,调用一个工具类

    package com.hx.jdbc.connection; import java.sql.Connection; import java.sql.Statement; import com.my ...

  9. 【JDBC】Java 连接 MySQL 基本过程以及封装数据库工具类

    一. 常用的JDBC API 1. DriverManager类 : 数据库管理类,用于管理一组JDBC驱动程序的基本服务.应用程序和数据库之间可以通过此类建立连接.常用的静态方法如下 static ...

随机推荐

  1. C#使用Xamarin开发可移植移动应用(5.进阶篇显示弹出窗口与通讯中心)附源码

    前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 说点什么.. 没啥好说的 ...

  2. Clang之语法抽象语法树AST

    语法分析器的任务是确定某个单词流是否能够与源语言的语法适配,即设定一个称之为上下文无关语言(context-free language)的语言集合,语法分析器建立一颗与(词法分析出的)输入单词流对应的 ...

  3. AugularJS1.X不升级到2.X

    面试中提到AugularJS1.X不升级到2.X,而是改用React的原因是,可以利用很多React现成的组件,需要确认下 以及提到了Vue, Weex技术

  4. Node.js之错误处理与断言处理

    Node.js之错误处理与断言处理 1. 使用 domain 模块处理错误 try..catch 多用于捕捉同步方法中的抛出错误,但不能用try..catch捕捉异步方法中抛出de错误 如: 1 va ...

  5. mysql 获取原数据

    show  databases show  tables information_schema show tables 语句的输出不包含temporary表   查看服务器所有数据库 >show ...

  6. Vim中常用的命令行

    Vim中常用的命令行... ------------------- 一些真正强大的武器总不是那么容易驾驭的,主角总得付出一些努力才能收获到更加强大的力量,对于 Vim 这种上古神器来说更是如此.由于它 ...

  7. 面试的妹纸问我:web缓存设置不是后台的事情吗?

    背景介绍 团队最近在招前端开发,早上收到一封简历,是个妹纸,从技能点来看还算符合要求,于是约了下午3点过来面试. 整个面试过程持续了大约40分钟,问的题目也比较常规,其中一道题就是"常见的性 ...

  8. org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML.问题思路

    15:36:34,549 WARN DefaultListableBeanFactory:1416 - Bean creation exception on FactoryBean type chec ...

  9. Thinkjs学习1—概述及MVC的粗略理解

    1.概述 ThinkJS 是一款使用 ES6/7 特性全新开发的 Node.js MVC 框架,对于之前是纯前端的童鞋,可能不了解MVC框架是什么,不知道后台和前台怎么配合. 本教程以Thinkjs2 ...

  10. JavaScrpt笔记之第二天

    JavaScript正则表达式regex 1.郑则表达式是有一个字符序列形成的搜索模式. *语法:/正则表达式主题/修饰符(可选) *正则表达式修饰符:i部分大小写:g全局搜索:m多行匹配 *[abc ...