JDBC讲解

本文介绍了JDBC(JavaDatabaseConnectivity)的基本概念,包括其作为Java操作关系型数据库的API的作用,以及如何通过创建工程、注册驱动、执行SQL等步骤进行快速入门。特别强调了PreparedStatement用于预防SQL注入的安全性。

JDBC

含义:实际上就是使用java语言操作关系型数据库的一套API。

全称:(Java DataBase Connectivity)java数据库连接。

JDBC本质:

官方定义的的一套操作所有关系型数据库的规则,即接口。

各个数据库厂商去实现这套接口,提供数据库驱动jar包。

我们可以使用这套接口编程,真正执行的代码时驱动jar包中的实现类。

JDBC的好处:

各数厂商使用相同的接口,java代码不需要针对不同的数据库分别开发。

可随时替换底层数据库,访问数据库java的代码基本不变。

创建jdbc快速入门

步骤1:

创建工程,导入驱动jar包

2:注册驱动:

Class.forName("com.mysql.jdbc.Driver"); 这个是固定不变的,直接照着写就行。

3: 获取连接:

Connection con = DriverManager.getConnection(url,username,password);

url访问数据库的url路径。

username为用户名;

password为密码;

4:定义sql语句:

String sql = "update....";

5: 获取执行sql对象:

Statement stm = con.createStatement();

6: 执行sql

stm.executeUpdate(sql);

7 : 处理返回结果

8:释放资源: 

  stm.close();

con.close();

DriverManager(驱动管理类)作用:

1:注册驱动 

2: 获取数据库连接

Class.forName("com.mysql.jdbc.Driver);

Driver中有静态代码块,可以自动执行DriverManger.registerDriver(new Driver()) 来注册驱动

自动加载jar包中的META-INF/services/java.sql.Driver文件中的驱动类。

(不用写也行)MYSQL 5之后的驱动包,可以省略注册驱动的步骤

在获取连接中url详细信息

Connection详解:

一 :获取执行SQL的对象。

1 获取执行sql对象

普通执行sql对象:

Statement createStatement()

预编译SQL的执行SQL对象: 防止SQL注入

PreparedStatement   prepareStatement(sql)

执行储存过程的对象:

CallableStatement prepareCall(sql)

二   管理事务。

Statement作用

执行sql语句

 int executeUpdate(sql); 执行DML DDL语句

返回值 DML 语句影响的行数 DDL 语句执行后,执行成功也可能返回0

ResultSet executeQuery(sql) 执行DQL 语句

返回值: ResultSet结果集对象。

Statement stmt = con.createStatement();

int count = stmt.executeUpdate(sql) 执行完DDL DML 语句受影响的行数。

 ResultSet

ResultSet (结果对象集)作用:

封装了DQL查询语句的结果:

ResultSet stmt.executeQuery(sql) 执行DQL语句,返回ResultSet对象。

获取查询结果:

boolean next():(1) 将光标从当前位置向前移动一行,(2) 判断当前行是否为有效行。

返回值:

true : 有效行,当前行有数据。

false : 无效行 , 当前行没有数据

   xxx getXxx(参数) 获取数据,比如: int getInt(参数),String getString(参数)。

一般获取数据时要用while来循环。

 PreparedStatement作用

预编译SQL 语句并执行,预防SQL注入问题。

SQL注入

SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法。

在sql语句中的连接符号可以用?来代替防止被SQL注入。

在获取对象的过程中来传入SQL语句,不用再执行的时候传入

同时在执行代码中要选取不用注入sql的语句(executeUpdate() )。

### Django 中使用 JDBC 进行数据库操作 Django 默认支持多种数据库后端,包括 MySQL、PostgreSQL 和 SQLite 等。然而,在 Python 生态系统中通常不直接通过 JDBC 来连接数据库,而是采用特定于 Python 的数据库适配器如 PyMySQL 或 psycopg2。 对于希望在 Django 应用程序里利用 JDBC 接口的情况,这并不是标准做法,因为 Django 设计之初就围绕着 Python 数据库 API 而不是 Java 的 JDBC 构建[^1]。不过如果确实存在这样的需求场景,可以通过一些间接的方法实现: #### 方法一:借助第三方工具 jaydebeapi 为了能够在 Python/Django 环境下调用 JDBC 驱动,可以考虑使用 `jaydebeapi` 模块作为桥梁。此模块允许 Python 代码加载并执行基于 JVM 的 JDBC 驱动程序。 安装依赖: ```bash pip install JayDeBeApi ``` 编写自定义数据库后端类以便集成到 Django settings.py 文件中的 DATABASES 设置部分: ```python from django.db.backends.base.base import BaseDatabaseWrapper import jaydebeapi as jdbc class JDBCDatabaseBackend(BaseDatabaseWrapper): vendor = 'jdbc' def get_new_connection(self, conn_params): return jdbc.connect( driver='com.mysql.cj.jdbc.Driver', # 替换为实际使用的JDBC驱动路径 url=conn_params['URL'], user=conn_params.get('USER'), password=conn_params.get('PASSWORD') ) def init_connection_state(self): pass ``` 修改项目的设置文件 (settings.py),指定新的数据库引擎以及必要的参数: ```python DATABASES = { 'default': { 'ENGINE': 'path.to.JDBCDatabaseBackend', 'URL': 'jdbc:mysql://localhost:3306/mydatabase?useSSL=false&serverTimezone=UTC', 'USER': 'root', 'PASSWORD': '', } } ``` 请注意这种方法可能带来性能上的开销,并且不一定能完全兼容所有的 Django ORM 功能特性[^2]。 #### 方法二:外部服务层处理 另一种方式是在应用程序架构之外建立一层专门负责数据访问的服务组件,该组件可以用任何适合的语言和技术栈构建(比如 Spring Boot),并通过 RESTful API 或 gRPC 协议与 Django 应用交互。这种方式虽然增加了系统的复杂度,但却提供了更好的灵活性和可维护性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值