JavaWeb作业:JDBC
发布日期:2022-03-08 21:50:48 浏览次数:1 分类:技术文章

本文共 3221 字,大约阅读时间需要 10 分钟。

认识JDBC

Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。我们通常说的JDBC是面向关系型数据库的。

JDBC驱动程序共分四种类型:

类型1
JDBC-ODBC桥
这种类型的驱动把所有JDBC的调用传递给ODBC,再让后者调用数据库本地驱动代码(也就是数据库厂商提供的数据库操作二进制代码库,例如Oracle中的oci.dll)。
类型2
本地API驱动
这种类型的驱动通过客户端加载数据库厂商提供的本地代码库(C/C++等)来访问数据库,而在驱动程序中则包含了Java代码。
类型3
网络协议驱动
这种类型的驱动给客户端提供了一个网络API,客户端上的JDBC驱动程序使用套接字(Socket)来调用服务器上的中间件程序,后者在将其请求转化为所需的具体API调用。
类型4
本地协议驱动
这种类型的驱动使用Socket,直接在客户端和数据库间通信。
API概述编辑

一、JDBC常用的API

在java.sql包中包含体现JDBC基本功能的若干接口和类:

1.Driver 接口:代表驱动程序

2.DriverManager 类:驱动程序管理员

3.Connection 接口:代表数据库连接

4.Statement 、PreparedStatement、CallableStatement 接口:代表数据库操作对象

5.ResultSet 接口:代表结果集

6.DatabaseMetadata、ResultSetMetadata接口:代表元数据

7.Types 类:代表JDBC类型

二、若干API的具体说明

Statement和PreparedStatement------SQL语句执行接口

Statement接口代表了一个数据库的状态,再向数据库发送相应的SQL语句时,都需要创建Statement接口或者PreparedStatement接口。

Statement主要用于操作不带参数的SQL语句,比如增、删、改。

PreparedStatement:预编译的Statement接口

第一步:通过连接获得PreparedStatement接口对象,用带占位符(?)的sql语句构造。                 PreparedStatement ps=con.praperedStatement("select * from test where id=?");第二步:设置参数                 ps.setString(1,"5"); 第三步:执行sql语句                 rs= ps.executeQuery();

Statement 发送完整的sql语句到数据库不是直接执行,而是先编译、后运行。

PreparedStatement 先发送带参数的sql语句,在发送一组参数值。

如果是同构的sql语句,则PreparedStatement效率高。对于异构的sql语句,两者效率差不多。

同构:两个sql语句可编译的部分是相同的,只有参数值不同。

异构:两个sql语句的格式是不同的。

注意点:

1.使用预编译的Statement(即PreparedStatement)编译多条sql语句一起执行。      2.可以跨数据库使用,编写通用程序。      3.能用预编译时尽量用预编译。

ResultSet接口:

ResultSet接口是查询结果集接口,它对返回的结果集进行处理。ResultSet是程序员进行JDBC操作的必须接口。

ResultSetMetaData----元数据操作接口:

ResultSetMetaData是对元数据进行操作的接口,可以实现很多高级功能。Hibernate运行数据库的操作,大多是通过此接口。可以认为,此接口是SQL查询语言的一种反射机制。ResultSetMetaData可以通过数据的形式,来遍历数据库各个字段的属性。对于开发者来说,此机制意义重大。JDBC通过元数据(MetaData)来获取具体的表相关的信息,例如,可以查询数据库中有哪些表、标有哪些字段、字段的属性等。MetaData通过一系列的getXXX将这些信息返回给我们。MetaData元数据包括 数据库源数据DatabaseMetadata和结果集元数据ResultSetMetaData。 数据库源数据DatabaseMetadata:使用connection.getMetaData()获得了关于数据库整体的元数据信息。结果集元数据ResultSetMetaData:resultSet.getDataMeta获得的比较重要的是表的列名、列的属性等信息。结果集元数据对象:ResultSetMetaData meta = rs.getDataMeta();               字段个数:meta.getColumnCount();               字段名字:meta.getColumnName();               字段JDBC类型:meta.getColumnType();               字段数据库类型:meta.getColumnTypeName();数据库元数据对象:DatabaseMetaData meta = con.getMetaData();                数据库名:meta.getDatabaseProductName();                数据库版本号:meta.getDatabaseProductVersion();                数据库驱动名:meta.getDriverName();                数据库驱动版本号:meta.getDriverVersion();                数据库URL:meta.getURL();               该连接的数据库登录名:meta.getUserName();

三、PreparedStatement对象

.PreparedStatement: 执行sql的对象,但是功能更强大

1.SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接。会造成安全性问题
1.输入用户随便,输入密码:a’ or ‘a’ = ‘a
2.sql: select * from user where username = ‘sadfgds’ and password = ‘a’ or ‘a’ = ‘a’
2.解决sql注入问题:使用PreparedStatement对象来解决
3.预编译的SQL:参数使用?作为占位符
4.步骤:
1.导入驱动jar包
2.注册驱动
3.获取数据库连接对象 Connection
4.定义sql
* 注意:sql的参数使用?作为占位符。如:select * from user where username = ? and password = ?;
5.获取执行sql语句的对象 PreparedStatement Connection.preparestatement(String sql);
6.给?赋值
* 方法:setXxx(参数1,参数2)
* 参数1:?的位置编号 从1开始
* 参数2:?的值
7.执行sql,接受返回结果,不需要传递sql语句
8.处理结果
9.释放资源
5.注意:后期都会使用PreparedStatement来完成增删改查的所有操作
1.可以防止SQL注入
2.效率更高

转载地址:https://blog.csdn.net/m0_55680096/article/details/122329566 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:JavaWeb作业: Servlet
下一篇:JavaWeb作业:数据库连接池与BDUtils工具

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月29日 08时10分35秒