什么是JDBC

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

为什么我们要用JDBC

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

简单操作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去查询数据库的数据了,接下来我们去了解一下上面代码用到的对象


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()

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()

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()

写一个简单工具类

通过上面的理解,我们已经能够使用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. }

如果文章有错的地方欢迎指正,大家互相交流。习惯在微信看技术文章的同学,可以关注微信公众号:Java3y

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

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

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

  2. JDBC第一篇--【介绍JDBC、使用JDBC连接数据库、简单的工具类】

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

  3. JDBC JdbcUtils( 本博多次出现的简陋工具类)

    package test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet;  ...

  4. JDBC基础篇(MYSQL)——自定义JDBCUtil工具类

    package util; import java.io.File; import java.io.InputStream; import java.sql.Connection; import ja ...

  5. 连接数据库的DBUtils工具类

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...

  6. SSM-MyBatis-10:Mybatis中SqlSession的getMapper()和简单的工具类MyBatisUtils

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- getMapper的作用,获取到接口,直接通过点的方式调用方法,以免直接手打的方式写错方法名,(强类型的方式) ...

  7. 字符串排序简单的工具类,数组转list,list转数组

    public static void main(String[] args) { /* String[] str = {"a", "c", "b&qu ...

  8. 简单HttpClientUtils工具类

    package com.zy.utils; import org.apache.http.HttpEntity; import org.apache.http.HttpStatus; import o ...

  9. 基于ansj_seg和nlp-lang的简单nlp工具类

    1.首先在pom中引入ansj_seg和nlp-lang的依赖包, ansj_seg包的作用: 这是一个基于n-Gram+CRF+HMM的中文分词的java实现: 分词速度达到每秒钟大约200万字左右 ...

随机推荐

  1. tinyxml的封装与使用(转载)

    tinyxml是个高效精简的xml解析开源代码. 针对tinyxml直接使用对于对xml不是很熟悉的入门新手来说,有些概念难以理解,因此我将其封装后,供大家使用. 头文件: #include &quo ...

  2. UEP-弹窗

    注意:弹出窗口Action中的dataWrap属性要加上set方法 默认情况下为GET方式传递参数,此方法对参数的长度有限制,若是长度超过范围的话请使用POST方式 function testPopW ...

  3. seaJS 模块加载过程分析

    先看一个seajs的官方example,  以下以seajs.use('main')为例, 解析加载mod main的过程 //app.html seajs.use("main") ...

  4. JQuery常用知识点及示例

    1.JQuery 名称解释 JQuery是封装了常用JS操作函数的一个库文件JQuery = Javascript + Query (查询)Jquery意思即指: 强大的DOM节点查询 2.官网:ht ...

  5. vue-router自动判断左右翻页转场动画

    前段时间做了一个移动端spa项目,技术基于 :vue + vue-router + vuex + mint-ui 因为使用了vue-cli脚手架的webpack模版,所有页面都以.vue为后缀的文件作 ...

  6. Git学习(1)-本地版本库的创建

    我用的是Git-2.14.3-64-bit版本,在windows64位上运行的,把软件分享下链接:http://pan.baidu.com/s/1jIoZ7Xc 密码:13q2. 安装及配置自行百度, ...

  7. shareInstance

    2.+(id)shareInstance; 外界初始化得到单例类对象的唯一借口,这个类方法返回的就是instance,即类的一个对象, 如果instance为空,则实例化一个对象,如果不为空,则直接返 ...

  8. 系列3|走进Node.js之多进程模型

    文:正龙(沪江网校Web前端工程师) 本文原创,转载请注明作者及出处 之前的文章"走进Node.js之HTTP实现分析"中,大家已经了解 Node.js 是如何处理 HTTP 请求 ...

  9. Java 获得Class的绝对路径方法

    Java获得class文件的绝对路径:1.e.g. Foo.class => Foo.class.getResuorce("").getFile(); 该方法在eclipse ...

  10. Django将request对象传入模板配置

    对于很多时候,需要从模板中获取很请求中很多内容,比如当前请求的url,当前的session变量中的某个值,这时候我们可以通过配置可将request对象传递进模板. django1.10版本: sett ...