JDBC
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC相关的知识,希望对你有一定的参考价值。
JDBC介绍
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL的Java API,可以为多种关系型数据库提供统一访问。它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,JDBC实现了所有这些面向标准的目标并且具有简单、严格类型定义且高性能实现的接口。
JDBC驱动程序实现了JDBC API接口。各个数据库厂家根据JDBC的规范制作的JDBC实现类。
JDBC的结构
- DriverManager:管理JDBC驱动的服务类,匹配连接使用通信子协议从 JAVA 应用程序中请求合适的数据库驱动程序。识别 JDBC 下某个子协议的第一驱动程序将被用于建立数据库连接。
- Driver:驱动程序接口,处理客户端与服务器的通信。很少使用 Driver对象,而是使用DriverManager管理此类型对象。
- Statement:SQL语句执行平台接口,将SQL语句提交到数据库。
- ResultSet:SQL查询语句结果对象接口,是一个迭代器。
Statement和PreparedStatement
PreparedStatement 接口继承了Statement接口,PreparedStatement接口更强大,甚至有人主张所有的查询都要使用 PreparedStatement。
大部分关系型数据库使用JDBC查询数据时会经过四步:
- 转换为SQL
- 编译SQL
- 优化数据查询路径
- 执行最后查询并返回数据
Statement执行查询时都会经历这四步,而PreparedStatement会预先执行1-3步,因此PreparedStatement会更快,并且PreparedStatement能够防止SQL注入,可以使用问号(“?”)做参数,使用setXXX()来为参数赋值。
PreparedStatement第一次执行时比较慢,所以如果一次执行的语句可以使用Statement,多次执行的语句用PreparedStatement。
Java使用JDBC访问mysql数据库
导入驱动程序包(mysql-connector-java-version
-bin.jar)
version
-bin.jar)- 在项目根目录下新建 libs 文件夹
- 将驱动程序包复制到 libs 文件夹下
- 在驱动程序包上 右键 ->build path -> add build path
Java程序访问数据库(6步)
Java访问数据库步骤:
- 注册驱动程序
- 获取连接
- 获取执行对象
- 执行SQL语句
- 处理结果
- 释放资源
1) 注册驱动程序
Class.forName("com.mysql.jdbc.Driver");
DriverManager.registerDriver()方法可以注册驱动程序,通过查看源码发现,在MySql的JDBC Driver实现类中的静态代码块已经实现了注册,所以使用反射方式注册。
public class Driver extends NonRegisteringDriver implements java.sql.Driver { static { try { java.sql.DriverManager.registerDriver(new Driver()); } catch (SQLException E) { throw new RuntimeException("Can‘t register driver!"); } } …… }
2)获取链接Connection
String url = "jdbc:mysql://localhost:3306/mydb";
String userName= "root";
String password = "123";
Connection conn = DriverManager.getConnection(url,userName,password);
3)获取执行对象
获取执行对象分三种情况
情况1:执行静态Sql,使用Statement
Statement stat = conn.createStatement();
情况2:执行动态Sql,使用PreparedStatement
PreparedStatement pst = conn.prepareStatement(sql);
情况3:执行存储过程,使用CallableStatement
CallableStatement
4)执行Sql语句(PreparedStatement)
方式1:executeUpdate用来执行 insert,update,delete 和 DDL语句。执行DDL语句返回 0,执行 Insert,Update,Delete 返回受影响的数据行数。
//drop table student; 删除表返回结果为0 int result = pst.executeUpdate(); System.out.println(result);
//insert into Student(sname,age) values (?,?)
PreparedStatement pst = conn.prepareStatement(sql);
pst.setString(1,"张三");
pst.setInt(2, 20);
//pst.setObject(1,"张三")
int result = pst.executeUpdate();
System.out.println(result);
方式2:executeQuery,返回结果为ResultSet
ResultSet rs = pst.executeQuery(); if(rs.next()){
//int id = rs.getInt(0); int id =rs.getInt("id"); String name = rs.getString("sname"); int age = rs.getInt("age"); System.out.println(id+name+age); }
方式3:execute
5)处理结果
6)释放资源
ResultSet,PreparedStatement,Connection都需要关闭,顺序为后得到的对象先关闭
rs.close();
pst.close();
conn.clost();
Connection
java.sql
接口 Connection
- 所有超级接口:
- Wrapper
public interface Connectionextends Wrapper
与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果。
Connection
对象的数据库能够提供描述其表、所支持的 SQL 语法、存储过程、此连接功能等等的信息。此信息是使用getMetaData
方法获得的。
PreparedStatement
java.sql
接口 PreparedStatement
- 所有已知子接口:
- CallableStatement
public interface PreparedStatementextends Statement表示预编译的 SQL 语句的对象。
SQL 语句被预编译并存储在
PreparedStatement
对象中。然后可以使用此对象多次高效地执行该语句。
常用方法
boolean execute()
在此 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句。
ResultSet executeQuery()
在此 PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象。
int executeUpdate()
在此 PreparedStatement 对象中执行 SQL 语句,该语句必须是一个 SQL 数据操作语言(Data Manipulation Language,DML)语句,比如 INSERT、UPDATE 或 DELETE 语句;或者是无返回内容的 SQL 语句,比如 DDL 语句。
ResultSet
java.sql
接口 ResultSet
- 所有超级接口:
- Wrapper
- 所有已知子接口:
- CachedRowSet, FilteredRowSet, JdbcRowSet, JoinRowSet, RowSet, SyncResolver, WebRowSet
public interface ResultSetextends Wrapper表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。
以上是关于JDBC的主要内容,如果未能解决你的问题,请参考以下文章