什么是 JDBC?
首先:JDBC是java连接数据库技术的简称,JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库。
JDBC API 库包含下面提到的每个任务,都是与数据库相关的常用用法。
- 制作到数据库的连接。
- 创建 SQL 或 MySQL 语句。
- 执行 SQL 或 MySQL 查询数据库。
- 查看和修改所产生的记录。
从根本上来说,JDBC 是一种规范,它提供了一套完整的接口,允许便携式访问到底层数据库,因此可以用 Java 编写不同类型的可执行文件,例如:
- Java 应用程序
- Java Applets
- Java Servlets
- Java ServerPages (JSPs)
- Enterprise JavaBeans (EJBs)
所有这些不同的可执行文件就可以使用 JDBC 驱动程序来访问数据库,这样可以方便的访问数据。
JDBC 具有 ODBC(微软提供的java连接数据库的服务) 一样的性能,允许 Java 程序包含与数据库无关的代码。
先决条件
- 核心 JAVA 编程
- SQL 或 MySQL 数据库
JDBC 架构
JDBC 的 API 支持两层和三层处理模式进行数据库访问,但一般的 JDBC 架构由两层处理模式组成:
-
JDBC API: 提供了应用程序对 JDBC 管理器的连接。
- JDBC Driver API: 提供了 JDBC 管理器对驱动程序连接。
JDBC API 使用驱动程序管理器和数据库特定的驱动程序来提供异构(heterogeneous)数据库的透明连接。
JDBC 驱动程序管理器可确保正确的驱动程序来访问每个数据源。该驱动程序管理器能够支持连接到多个异构数据库的多个并发的驱动程序。
结构:
DriverManger类:依赖数据库的不同,管理JDBC驱动。
Connection接口:负责连接数据库并担任传输数据的任务。
Statement接口:由connection产生,负责执行SQL语句。
ResultSet接口:从数据源读取数据。
JDBC 的 API 提供了以下接口和类:
DriverManager :这个类管理一系列数据库驱动程序。匹配连接使用通信子协议从 JAVA 应用程序中请求合适的数据库驱动程序。识别 JDBC 下某个子协议的第一驱动程序将被用于建立数据库连接。
Driver : 这个接口处理与数据库服务器的通信。你将很少直接与驱动程序互动。相反,你使用 DriverManager 中的对象,它管理此类型的对象。它也抽象与驱动程序对象工作相关的详细信息。
Connection : 此接口具有接触数据库的所有方法。该连接对象表示通信上下文,即,所有与数据库的通信仅通过这个连接对象进行。
Statement : 使用创建于这个接口的对象将 SQL 语句提交到数据库。除了执行存储过程以外,一些派生的接口也接受参数。
ResultSet : 在你使用语句对象执行 SQL 查询后,这些对象保存从数据获得的数据。它作为一个迭代器,让您可以通过它的数据来移动。
SQLException : 这个类处理发生在数据库应用程序的任何错误。
java.sql包中有3个接口分别定义了对数据调用的不同方式。
Statement:用于执行静态的SQL语句并返回它所生成的结果。
PreparedStatement:SQL语句被预编译并保存在此对象中,可以对此对象多次高效的执行该语句。
CallbaleStatement:用于执行SQL存储过程。
使用Statement操作数据表的弊端:
通过调用Connection接口的creatStatement()方法创建对象,该对象用于执行静态的sql语句,并返回执行结果。
但是使用Statement方法存在弊端:
1.存在拼串操作,繁琐。
2.存在SQL注入问题
SQL注入是利用某些系统对用户输入的数据进行充分的检查,而在用户输入数据中注入非法的SQL语句段或者命令(select user ,password from user where id=1 or '1'='1')等这种恒成立的语句,从而利用系统的SQL引擎完成恶意的行为的做法。
对于java而言,要防范SQL注入问题,只需要用PreparedStatement(从Statement扩展而来的)取代Statement就可以了
总结
Driver代表数据库驱动。
Connection代表数据库连接、
Statement代表数据库操作指令,但是为了防止SQL注入问题替换为PreparedStatement也就说预编译的Statement。
其次对于数据库操作,CRUD(增删改查)操作所需要返回的结果集还不一样,对于增删改来说,不需要返回结果集,只需要打印操作是否成功即可,但是对于查询操作来说,查询是需要返回一个结果集的,用于显示所查询的结果。
于是乎就有了ResultSet接口用来返回查询的结果,代表查询结果。
java连接数据库的五种方式,最后一种为常用的方式。
JAVA连接数据库方式(Java要连接数据库必须要导入数据库驱动的jar包,也就是mysql-connector-java-5.X.XX-bin.jar或者mysql-connector-java-8.X.XX-bin.jar并且创建路径才可以使用数据库驱动来和数据库就行连接等操作)
import org.junit.Test;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class ConnectionTest {
@Test
//方式一连接数据库
public void testConnection1() throws SQLException {
//1.获取Driver实现类对象
Driver driver = new com.mysql.jdbc.Driver();
//jdbc:mysql是协议
//localhost:3306是IP地址
//world是数据库名称
//2.提供要连接的数据库
String url = "jdbc:mysql://localhost:3306/world";
//3.将用户和密码封装在Properties中
Properties info = new Properties();
info.setProperty("user", "root");
info.setProperty("password", "root");
Connection connect = driver.connect(url, info);
System.out.println(connect);
}
//方式二连接数据库:对齐方式一的迭代,在如下的程序中不出现第三方api,使得程序具有更好的可移植型
@