一文带你快速学会JDBC及获取连接的五种方式

 更新时间:2022年9月26日 18:04  点击:174 作者:不遇言熙

快速学会JDBC及获取连接的五种方式

1. JDBC基本介绍

  • JDBC为访问不同的数据库提供了统一的接口,为使用者屏蔽了细节问题
  • Java程序员使用JDBC,可以连接任何提供了JDBC驱动程序的数据库系统,完成对数据库的各种操作。
  • JDBC基本原理图

2. JDBC快速入门

2.1 JDBC程序编写步骤

  • 注册驱动-加载Driver类
  • 获取连接-得到Connection
  • 执行增删改查-发送SQL给MySQL执行
  • 释放资源-关闭相关连接

2.2 案例演示

2.2.1 前置工作,在数据库中建立对应表

CREATE TABLE `actor`(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(32) NOT NULL DEFAULT '',
sex CHAR(1) NOT NULL DEFAULT '女',
borndate DATETIME,
phone VARCHAR(12));

2.2.2 前置工作,导入MySQL数据库的对应jar包

在项目下新建一个文件夹如libs,将对应jar包拷入,并将其加入library中

image-20220824161213960

public static void main(String[] args) throws SQLException {
        //注册驱动
        Driver driver = new Driver();
        String url="jdbc:mysql://localhost:3306/zxy_db01";
        String user="root";
        String psd = "123";
        DriverManager.registerDriver(driver);
        //获得连接
        Connection connection = DriverManager.getConnection(url,user,psd);
        //执行SQL语句
        String sql = "insert into actor values(null, '刘德华', '男', '1970-11-11', '110')";
        //statement 用于执行静态 SQL 语句并返回其生成的结果的对象
        Statement statement = (Statement) connection.createStatement();
        int rows = statement.executeUpdate(sql);
        System.out.println(rows > 0 ? "成功" : "失败");
        //关闭资源
        statement.close();
        connection.close();
    }

然后我们再去查询数据库,就会发现已经成功啦

3. 相关类的介绍

3.1 Statement

相信对于上面的代码中你最好奇的就是Statement这个类,我们就来聊一聊这个。

基本介绍:

  1. 用于执行静态Sql语句并返回其生成结果
  2. 在连接建立后,需要对数据库进行访问,执行命名或是SQL语句,可以通过Statement(存在SQL注入问题)PrepardStatement(预处理) CallableStatement(存储过程)
  3. Statement对象执行SQL语句,存在SQL注入风险
  4. SQL注入是利用某些系统没有对用户输入对数据进行充分对检查,而在用户输入数据中注入非法对SQL语句段或命令,恶意攻击数据库
  5. 要防范SQL注入,只要用PreparedStatement(从Statement扩展而来),取代Statement就可以了

其实归根究底,这个类就是一个用来调用执行SQL语句的类。

3.2 ResultSet[结果集]

这个是执行查询的SQL时返回的对象,如下面这段代码

String sql = "select id, name , sex, borndate from actor";
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()) { // 让光标向后移动,如果没有更多行,则返回 false
    int id = resultSet.getInt(1); //获取该行的第 1 列 
    String name = resultSet.getString(2);//获取该行的第 2 列 
    String sex = resultSet.getString(3); 
    Date date = resultSet.getDate(4); 
    System.out.println(id + "\t" + name + "\t" + sex + "\t" + date);
}

表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。

ResultSet对象保持一个光标指向其当前的数据行。 最初,光标位于第一行之前。 next方法将光标移动到下一行,并且由于在ResultSet对象中没有更多行时返回false ,因此可在while循环中使用循环来遍历结果集。

3.3 PreparedStatement

这个类其实和上面介绍的Statement效果类似,相当于Statement的改进版,增加了预处理过程避免了sql注入现象(简单来讲就是破获你的数据库中的信息),下面我们就来聊聊它

  1. PreparedStatement执行的SQL语句中的参数用问号(?)来表示,调用PreparedStatement对象额setXxx()方法来设置这些参数,setXxx()方法有两个参数,第一个参数是要设置的SQL语句中的参数的索引(从1开始),第二个是设置的SQL语句中的参数的值。
  2. 调用executeQuery(),返回ResultSet对象
  3. 调用 executeUpdate(),执行增删改等操作。

其优点也是极其明显的

  • 不再使用+拼接SQL语句,减少语法错误
  • 有效的解决了SQL注入问题
  • 大大减少了编译次数,效率提高

话不多说,我们直接上案例

String sql = "select name , pwd from admin where name =? and pwd = ?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, "刘德华"); 
preparedStatement.setString(2, "123");
ResultSet resultSet = preparedStatement.executeQuery(sql);
if (resultSet.next()) { //如果查询到一条记录,则说明该管理存在 
    System.out.println("恭喜, 登录成功"); } 
else {
    System.out.println("对不起,登录失败"); 
     }

4. 关闭资源

在JDBC编码过程中,我们创建了resultSet,statement,connection等资源,这些资源在使用完毕后一定要进行关闭资源,关闭的过程中遵循从里到外的原则,因为在增删改查中的操作中都要用到这样的关闭操作

resultSet.close();
statement.close();
connection.close();

5. 获取数据库连接的五种方式

方式一

直接通过Driver类获得连接

 public void way1() throws SQLException {
        Driver driver = new Driver();
        String url = "jdbc:mysql://localhost:3306/zxy_db01";
        Properties info = new Properties();
        info.setProperty("user","root");
        info.setProperty("psd","123");
        Connection connect = driver.connect(url, info);
        System.out.println(connect);
    }

方式二

通过反射的方式加载Driver类获得连接

 public void way2() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
        Class<?> clzz = Class.forName("com.mysql.jdbc.Driver");
        Driver driver = (Driver) clzz.newInstance();
        String url = "jdbc:mysql://localhost:3306/zxy_db01";
        Properties info = new Properties();
        info.setProperty("user","root");
        info.setProperty("psd","123");
        Connection connect = driver.connect(url, info);
        System.out.println(connect);
    }

方式三

使用DriverManager替换Driver获得连接

 public void way3() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
        Class<?> clzz = Class.forName("com.mysql.jdbc.Driver");
        Driver driver = (Driver) clzz.newInstance();
        String url="jdbc:mysql://localhost:3306/zxy_db01";
        String user="root";
        String psw = "123";
        DriverManager.registerDriver(driver);
        Connection connection = DriverManager.getConnection(url,user,password);
        System.out.println(connection);
    }

方式四

使用Class.forName自动完成驱动注册获得链接

public void way4() throws SQLException, ClassNotFoundException {
        Class.forName("com.mysql.jdbc.Driver");
        String url="jdbc:mysql://localhost:3306/zxy_db01";
        String user="root";
        String psd = "123";
        Connection connection = DriverManager.getConnection(url, user, password);
        System.out.println(connection);
    }

方式五

借助配置文件获得来获得连接

user=root
psd=123
url=jdbc:mysql://localhost:3306/zxy_db01
driver=com.mysql.jdbc.Driver

 public void way5() throws SQLException, ClassNotFoundException, IOException {
        Properties properties = new Properties();
        properties.load(new FileInputStream("src\\mysql.properties"));
        String user = properties.getProperty("user");
        String password = properties.getProperty("psd");
        String url = properties.getProperty("url");
        String driver = properties.getProperty("driver");
        Class.forName(driver);
        Connection connection = DriverManager.getConnection(url, user, psd);
        System.out.println(connection);
    }

相信看完本篇你对jdbc已经有了不错的了解了

总结

到此这篇关于一文快速学会JDBC及获取连接的五种方式的文章就介绍到这了,更多相关学会JDBC及获取连接方式内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!

原文出处:https://blog.csdn.net/m0_64102491/article/details/126592866

[!--infotagslink--]

相关文章

  • PHP成员变量获取对比(类成员变量)

    下面本文章来给大家介绍在php中成员变量的一些对比了,文章举了四个例子在这例子中分别对不同成员变量进行测试与获取操作,下面一起来看看。 有如下4个代码示例,你认...2016-11-25
  • php 获取用户IP与IE信息程序

    php 获取用户IP与IE信息程序 function onlineip() { global $_SERVER; if(getenv('HTTP_CLIENT_IP')) { $onlineip = getenv('HTTP_CLIENT_IP');...2016-11-25
  • php获取一个文件夹的mtime的程序

    php获取一个文件夹的mtime的程序了,这个就是时间问题了,对于这个问题我们来看小编整理的几个例子,具体的操作例子如下所示。 php很容易获取到一个文件夹的mtime,可以...2016-11-25
  • 如何获取网站icon有哪些可行的方法

    获取网站icon,常用最简单的方法就是通过website/favicon.ico来获取,不过由于很多网站都是在页面里面设置favicon,所以此方法很多情况都不可用。 更好的办法是通过google提供的服务来实现:http://www.google.com/s2/favi...2014-06-07
  • jquery如何获取元素的滚动条高度等实现代码

    主要功能:获取浏览器显示区域(可视区域)的高度 : $(window).height(); 获取浏览器显示区域(可视区域)的宽度 :$(window).width(); 获取页面的文档高度 $(document).height(); 获取页面的文档宽度 :$(document).width();...2015-10-21
  • jquery获取div距离窗口和父级dv的距离示例

    jquery中jquery.offset().top / left用于获取div距离窗口的距离,jquery.position().top / left 用于获取距离父级div的距离(必须是绝对定位的div)。 (1)先介绍jquery.offset().top / left css: 复制代码 代码如下: *{ mar...2013-10-13
  • Jquery 获取指定标签的对象及属性的设置与移除

    1、先讲讲JQuery的概念,JQuery首先是由一个 America 的叫什么 John Resig的人创建的,后来又很多的JS高手也加入了这个团队。其实 JQuery是一个JavaScript的类库,这个类库集合了很多功能方法,利用类库你可以用简单的一些代...2014-05-31
  • C#获取字符串后几位数的方法

    这篇文章主要介绍了C#获取字符串后几位数的方法,实例分析了C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • DOM XPATH获取img src值的query

    复制代码 代码如下:$nodes = @$xpath->query("//*[@id='main_pr']/img/@src");$prurl = $nodes->item(0)->nodeValue;...2013-10-04
  • jquery获取tagName再进行判断

    如果是为了取到tagName后再进行判断,那直接用下面的代码会更方便: $(element).is('input') 如果是要取到标签用作到别的地方,可以使用一下代码: $(element)[0].tagName 或: $(element).get(0).tagName...2014-05-31
  • PHP 如何获取二维数组中某个key的集合

    本文为代码分享,也是在工作中看到一些“大牛”的代码,做做分享。 具体是这样的,如下一个二维数组,是从库中读取出来的。 代码清单: 复制代码 代码如下: $user = array( 0 => array( 'id' => 1, 'name' => '张三', 'ema...2014-06-07
  • php获取汉字拼音首字母的方法

    现实中我们经常看到这样的说明,排名不分先后,按姓名首字母进行排序。这是中国人大多数使用的排序方法。那么在php程序中该如何操作呢?下面就分享一下在php程序中获取汉字拼音的首字母的方法,在网上搜到的大多数是有问题的...2015-10-23
  • js有序数组的连接问题

    1.前言 昨天碰到一道关于如何解决有序数组的连接问题,这是一个很常见的问题。但是这里要考虑到代码的效率问题,因为要连接的数组都是有序的,这是一个非常重要的前提条件。2.简单但效率不高的算法 我首先想到的是使用...2013-10-04
  • 使用C#获取系统特殊文件夹路径的解决方法

    本篇文章是对使用C#获取系统特殊文件夹路径的解决方法进行了详细的分析介绍,需要的朋友参考下...2020-06-25
  • php如何获取文件的扩展名

    网上也有很多类似的方法,不过都存在这样那样的不严谨的问题,本文就不一一分析了,这里只给出最正确的利用php 获取文件扩展名(文件后缀名)的方法。 function get_extension($filename){ return pathinfo($filename,PATHIN...2015-10-30
  • 基于JavaScript获取鼠标位置的各种方法

    这篇文章主要介绍了基于JavaScript获取鼠标位置的各种方法 ,需要的朋友可以参考下...2015-12-18
  • C#获取变更过的DataTable记录的实现方法

    这篇文章主要介绍了C#获取变更过的DataTable记录的实现方法,对初学者很有学习借鉴价值,需要的朋友可以参考下...2020-06-25
  • C#连接Oracle数据库字符串(引入DLL)的方式

    这篇文章主要给大家介绍了关于C#连接Oracle数据库字符串(引入DLL)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-06-25
  • ShardingSphere jdbc集成多数据源的实现步骤

    本文主要介绍了ShardingSphere jdbc集成多数据源的实现步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-10-21
  • C#连接到sql server2008数据库的实例代码

    这篇文章主要介绍了C#连接到sql server2008数据库的实例代码,需要的朋友可以参考下...2020-06-25