初识JDBC
Posted Cardiolith
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识JDBC相关的知识,希望对你有一定的参考价值。
一. JDBC简介
JDBC全称Java Date Base Connectivity(Java数据库连接),是一种用于执行SQL语句的Java API,可以为多种数据库提供统一访问(“编写一次,处处运行”)。
简单来说,JDBC是搭建服务器应用程序与数据库的桥梁。
二. 数据库驱动
安装好数据库之后,我们的应用程序也是不能直接访问数据库,而是必须要通过相应的数据库驱动程序,通过驱动程序与实际的数据库的通信。
三. 常用接口
1.Driver接口
Driver接口由数据库厂商提供实现,Java开发人员只需要使用这个接口。
在编程中要连接到数据库,就需要装载特定厂商的数据库驱动程序,不同的数据库有不同的装载方法。
装载mysql驱动:Class.forName("com.mysql.jdbc.Driver");
装载Oracle驱动:Class.forName("com.jdbc.driver.OracleDriver");
2.DriverManager接口
DriverManager管理一组JDBC驱动程序的基本服务。
它跟踪可用的驱动程序,并在数据库和相应的驱动之间建立连接。
3.Connection接口
Connection接口代表与特定的数据库的连接(会话),要对数据表中的数据进行操作,首先要获取数据库连接。Connection实现就像在应用程序中与数据库之间开通了一条 渠道。
通过DriverManager类的getConnection()方法可获取Connection实例。
连接MySQL数据库:Connection con = DriverManager.getConnection("jdbc:mysql://host:port/datebase", USERNAME, PASSWORD);
连接Oracle数据库:Connetion con = DriverManager.getConnection("jdbc:oralce:thin:@host:port:datebase");
4.Statement接口
Statement是Java执行数据库操作的一个重要接口,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL静态语句并返回结果生成的对象。
三种Statement类:
- Statement:由createStatement创建,用于发送简单的SQL语句(不带参数)。
- PreparedStatement:继承自Statement接口,由preparedStatement创建,用于发送含有一个或多个参数的SQL语句。PreparedStatement对象比Statement对象的效率 更高,并且可以防止SQL注入,所以我们一般都使用PreparedStatement。
- CallableStatement:继承自PreparedStatement接口,由方法prepareCall创建,用于调用存储过程。
常用方法:
- excute(String sql):执行给定的 SQL 语句,该语句在返回一个布尔值时用于反映SQL语句是否执行成功。
- excuteQuery(String sql):执行select语句,该语句返回单个 ResultSet 对象。
- executeUpdate(String sql):运行insert/update/delete操作,返回更新的行数。
- addBatch(String sql) :将给定的 SQL 命令添加到此 Statement 对象的当前命令列表中。
- executeBatch():向数据库发送一批sql语句执行,如果全部命令执行成功,则返回更新计数组成的数组。
5.ResultSet接口
数据库结果集的数据表,通常通过执行查询数据库的语句生成。
ResultSet提供检索不同类型字段的方法,常用的有:
- getString(int index)、getString(String columnName):获得在数据库里是varchar、char等类型的数据对象。
- getFloat(int index)、getFloat(String columnName):获得在数据库里是Float类型的数据对象。
- getDate(int index)、getDate(String columnName):获得在数据库里是Date类型的数据。
- getBoolean(int index)、getBoolean(String columnName):获得在数据库里是Boolean类型的数据。
- getObject(int index)、getObject(String columnName):获取在数据库里任意类型的数据。
ResultSet还提供了对结果集进行滚动的方法:
- next():移动到下一行
- Previous():移动到前一行
- absolute(int row):移动到指定行
- beforeFirst():移动resultSet的最前面。
- afterLast() :移动到resultSet的最后面。
使用后依次关闭对象及连接:ResultSet → Statement → Connection
四. 使用JDBC步骤
加载JDBC驱动程序 → 建立数据库连接Connection → 创建执行SQL的语句Statement → 处理执行结果ResultSet → 释放资源
1. 注册驱动 (只做一次)
方式一:Class.forName(“com.MySQL.jdbc.Driver”);
推荐这种方式,不会对具体的驱动类产生依赖。
方式二:DriverManager.registerDriver(com.mysql.jdbc.Driver);
会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖。
2. 建立连接
Connection con = DriverManager.getConnection(url, username, password);
3. 创建执行SQL语句的statement
//Statement String id = "5"; String sql = "delete from table where id=" + id; Statement st = conn.createStatement(); st.executeQuery(sql); //存在sql注入的危险 //如果用户传入的id为“5 or 1=1”,那么将删除表中的所有记录
4. 处理执行结果(ResultSet)
1 ResultSet rs = ps.executeQuery(); 2 While(rs.next()){ 3 rs.getString(“col_name”); 4 rs.getInt(1); 5 //… 6 }
5. 释放资源
//数据库连接(Connection)非常耗资源,尽量晚创建,尽量早的释放 //都要加try catch 以防前面关闭出错,后面的就不执行了 1 try { if (rs != null) { rs.close(); } } catch (SQLException e) { e.printStackTrace(); } finally { try { if (st != null) { st.close(); } } catch (SQLException e) { e.printStackTrace(); } finally { try { if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } }
五. 安装教程(包括MyEclipse,MySQL,MySQL Connector)(亲测有效)
myeclipse-2017 链接:https://pan.baidu.com/s/13kcZ7l3XIGD7oQGtPa38jw 密码:ltmw
myeclipse破解文件 链接:https://pan.baidu.com/s/1u2CXKverCgFdWedyFk1yFg 密码:n05h
myeclipse安装教程来自园友博客 链接:https://www.cnblogs.com/qianjun2017/p/8108253.html
Windows版本MySQL下载地址:https://dev.mysql.com/downloads/file/?id=479669
MySQL下载后安装配置 来自CSDN博客 链接:https://blog.csdn.net/xielong0509/article/details/80636843
MySQL Connector 链接:https://pan.baidu.com/s/1poBOudWobnxIrpSFLKs9Og 密码:hkfj
- 关于Java Web Project 导入数据库jar包
复制mysql-connector-java文件目录下两个jar包 ,进入工程文件目录下WebRoot -> WEB_INF-> lib 右键粘贴 ,再分别对这两个jar包右键Build Path选择Add to build path.
---每天积累一点点,吃水不忘挖井人---
以上是关于初识JDBC的主要内容,如果未能解决你的问题,请参考以下文章
初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段
初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段