JDBC常见用法

JDBC中主要的类及常用方法

Class类

Class类全称java.lang.Class,Java程序运行时会自动创建程序中的每个类的Class对象,通过Class类的方法,可以得到程序中每个类的信息。Class类方法主要包括:

public static Class forName(String className):该方法根据给定的字符串参数返回相应的Class对象。例:Class.forName("com.mysql.jdbc.Driver")的作用是加载Oracle驱动。

DriverManager类

DriverManager类在用户程序和数据库系统之间维护着与数据库驱动程序之间的连接。它实现驱动程序的装载、创建与数据库系统连接的Connection类对象。DriverManager类的方法主要包括

public static Connection getConnection(String url, String user, String password)
//根据url、数据库登录的用户名、密码获取一个数据库的连接对象。

Connection接口

Connection用于管理到指定数据库的连接。

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

Connetction类中重要的成员方法包括:

createStatement()方法:创建Statement类的实例。

prepareStatement()方法:创建PreparedStatement类的实例。

close():立即释放此Connection对象的数据库和JDBC资源,而不是等待它们被自动释放

Statement接口

Statement数据库操作类提供执行数据库操作的方法,如更新、查询数据库记录等。

Statement对象的创建方式如下:

Statement stmt=con.createStatement();

Statement类中重要的成员方法包括:

executeQuery()方法:它用来执行一个查询语句,参数是一个String对象,就是一个SELECT语句。它的返回值是ResultSet类的对象,查询结果封装在该对象中

ResultSet接口

ResultSet结果集类提供对查询结果集进行处理的方法。例:

ResultSet rs=stmt.executeQuery(" select * from users ");

ResultSet对象维持着一个指向表格的行的指针,开始时指向表格的起始位置(第一行之前)。 ResultSet类常用的方法包括:

next()方法:光标移到下一条记录,返回一个boolean值。

previous()方法:光标移到前一条记录。

getXXX()方法:获取指定类型的字段的值。调用方式 getXXX("字段名") 或 getXXX(int i)。i值从1开始表示结果集中第一列的字段。

close():关闭ResultSet对象

JDBC的时间处理

  1. 日期类型用java.sql.Date 
  2. 时间类型用java.sql.Time 
  3. 日期/时间类型用java.sql.Timestamp

getTimestamp()可以把年月日时分秒都取出来,getDate()只能取出年月日,getTime()只能取出时分秒。

要把JDBC的日期/时间类型转换为字符串:

Timestamp timeStamp = rs.getTimestamp("birth");		//通过数据库访问获取到该数据
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //格式化日期
String str = sdf.format(timeStamp); 

 JDBC封装工具类

无论是对数据进行查询操作,还是进行增删改操作,都需要打开连接,关闭资源等操作,因此,可以把对把打开连接和关闭连接封装到一个工具类

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DBUtil {//该段代码完成加载数据库驱动,整个程序只需要加载一次,所以放在静态块中。static{try {Class.forName("com.mysql.jdbc.Driver");//oracle数据库驱动程序} catch (ClassNotFoundException e) {e.printStackTrace();}}//获取数据库连接方法public static Connection getConnection() throws SQLException{String url = "jdbc:mysql://127.0.0.1:3306/neuedu";Connection conn = DriverManager.getConnection(url,"root","root");return conn;}//释放资源(方法重载)public static void close(Statement st,Connection conn){try{if(st != null){try {st.close();} catch (SQLException e) {                        e.printStackTrace();}}}finally{if(conn != null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}public static void close(ResultSet rs, Statement st, Connection conn) {try {if (rs != null) {try {rs.close();} catch (SQLException e) {e.printStackTrace();}}} finally {try {if (st != null) {try {st.close();} catch (SQLException e) {e.printStackTrace();}}} finally {if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}}
}

SQL注入问题

 使用Statement对象查询数据库时,由于定义的SQL语句是拼接的,有可能出现SQL注入问题。所谓SQL注入,就是通过把SQL命令插入到查询字符串,最终达到欺骗服务器执行恶意的SQL命令

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SqlInject {    public static void login (String name,String pwd) throws SQLException{Connection conn = null;Statement st = null;ResultSet rs = null;try{conn = DBUtil.getConnection();st = conn.createStatement();// 因为拼接SQL语句导致的SQL注入式攻击风险String sql = "SELECT * FROM t_user WHERE NAME='"+name+"' AND PWD='"+pwd+"'";rs = st.executeQuery(sql); if(rs.next()){System.out.println("登录成功..");}else{System.out.println("登录失败..");}}finally{DBUtils.close(rs, st, conn);}}public static void main(String[] args) throws SQLException {login("123123", "sadfsdf or 1=1");//注入SQL                }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/48030.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Electron案例解析——切换主题颜色的案例

效果图 核心 Electron的 nativeTheme.themeSource属性,值是string。有三个参数:system, light 和 dark,用来覆盖、重写Chromium内部的相应的值 Election的api描述值nativeTheme.themeSource被用来覆盖、重写Chromium内部的相应的值system, …

邮件安全篇:邮件传输加密(SSL/TLS or STATRTTLS)

1. 前言 使用过邮件客户端的同学一定见过下面这张图。这是客户端账号配置界面,里面有SSL、STARTTLS选项。刚接触邮件客户端的同学肯定会有这些疑问:什么是SSL?什么是STARTTLS?两者有什么区别?具体该如何选择呢&#x…

Stable Diffusion 使用详解(2)---- 图生图原理,操作,参数

目录 背景 图生图原理 基本原理 1. 扩散模型基础 2. 图生图的具体流程 3. 关键技术点 4. 应用实例 CLIP 原理 1.基本概念 2. 核心特点 使用及参数 随机种子 重绘幅度 图像宽高 采样方法 1. DPM(扩散概率模型) 2. SDE(随机微…

能源化工5G防爆终端能给行业带来什么重要作用?

在能源化工领域,5G防爆终端的引入无疑为行业带来了革命性的变革与重要作用。这些集成了先进5G通信技术和防爆设计的高端设备,不仅提升了生产作业的安全性,还极大地增强了运营效率与智能化水平。 高速、低延迟的5G网络为防爆终端提供了前所未有…

机器人控制:物理人机交互控制中的不稳定性因素及其解决思路

机器人控制:物理人机交互控制中的不稳定性因素及其解决思路 物理人机交互控制中的不稳定性是指在机器人或相关物理系统与人类进行交互时,系统行为表现出的一种非预期、不可控或难以预测的动态特性。这种不稳定性可能源于多个方面,包括但不限于…

SPA Fiori开发实战课程(一)

前言 由于工作需要,对Fiori的开发有了一些具体实践,所以做一些记录和总结。 准备工作 1. 对前端有一定的了解,熟悉Node.js,Vue等前端服务器和基础框架。 2. 后端使用ABAP系统。 3. 使用Visual Studio Code进行开发。 工程搭建 打…

基于springboot+vue+uniapp的开放实验室预约管理系统

开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…

快速创建 vue 项目并添加 Dockerfile 文件

文章目录 快速创建 vue 项目方法 1:使用 Vue CLI方法 2:使用 create-vueVue 前端 Dockerfile 镜像基于 Node 镜像,打包运行基于 Nginx 镜像,直接运行参考🚀 本文内容:使用 Vue CLI / create-vue 快速创建一个 vue 项目,并添加 Dockerfile 镜像实现打包启动。 ⭐ 前提条…

通信流程:https【SSL/TLS】,git仓库【https/SSH】,蓝牙【面对面快传/AirDrop】

目录 HTTPS HTTP(80端口) SSL/TLS协议(传输层,443端口) 密文传输:SSL的后续版本TLS TLS1.2握手 1.摘要算法(散列函数 Hash Function):验证信息的完整性,不可逆 第三方认证 引…

弹性网络回归(Elastic Net Regression)

弹性网络回归(Elastic Net Regression)的详细理论知识推导 理论背景 弹性网络回归结合了岭回归(Ridge Regression)和Lasso回归(Lasso Regression)的优点,通过引入两个正则化参数来实现特征选择…

Day02-Pod资源清单编写,资源的增删改查,镜像的下载策略及常见的Pod相关面试题实战

Day02-Pod资源清单编写,资源的增删改查,镜像的下载策略及常见的Pod相关面试题实战 0、昨日内容回顾:1、K8S资源清单2、实战案例3、K8S的Pod资源运行多个容器案例4、故障排查案例5、环境准备6、故障常用命令7、面试题Q1: 当一个Pod有多个容器时…

【Vue】 组件通信方式

VUE中实现通信的⽅式: props:- 若 父传子:属性值是非函数。- 若 子传父:属性值是函数。emitv-modelrefs- $refs:父→子。$parent:子→父。provide/inject:祖孙组件直接通信,在祖先组…

2024年下半年系统架构师案例预测

2024年上半年系统架构师案例考试题目 第一道大题: 1小问:微服务的概念 2小问:质量属性效用树 3小问:质量评估6要素 第二道题:UML(时序图和通信图) 1.时序图概念(消息的类型有什…

【Android】ConstrainLayout约束布局基本操作

文章目录 介绍约束条件添加方式外边距设置删除方式 添加约束条件父级位置对齐方式基线对齐引导线约束屏障约束 约束偏差使用链控制线性组 介绍 约束布局ConstraintLayout是 Android Studio 2.3 起创建布局后的默认布局 主要是为了解决布局多层嵌套问题,以灵活的方式…

抖音/腾讯/百度ocpm深度回传如何操作?广告投放双出价的投放技巧?

要实现抖音、腾讯和百度的OCPM(Optimized Cost Per Mille)深度回传,可以通过借助第三方平台,例如(转化宝)实现广告数据精准回传,如此之外,在广告投放过程中还需要注重这些方面。 转化…

ros笔记02--从零体验ros2中的服务通信方式

ros笔记02--从零体验ros2中的服务通信方式 介绍创建步骤注意事项说明 介绍 在ROS 2中,服务指的是远程过程调用,client调用server,server节点收到数据后计算出结果并返回给client. 服务通常期望能快速返回,因此不应当用于处理长时…

深度学习落地实战:大模型生成图片

前言 大家好,我是机长 本专栏将持续收集整理市场上深度学习的相关项目,旨在为准备从事深度学习工作或相关科研活动的伙伴,储备、提升更多的实际开发经验,每个项目实例都可作为实际开发项目写入简历,且都附带完整的代…

代理伺服器分類詳解

代理伺服器的主要分類 代理伺服器可以根據不同的標準進行分類。以下是幾種常見的分類方式: 按協議分類按匿名性分類按使用場景分類 1. 按協議分類 根據支持的協議類型,代理伺服器可以分為以下幾類: HTTP代理:專門用於處理HTT…

TypeScript 教程(十):项目配置、代码质量与前端框架集成

目录 前言回顾类型声明文件与异步编程1. tsconfig.json 高级配置a. 基本配置b. 高级配置选项 2. 使用 Webpack 构建 TypeScript 项目a. 安装依赖b. 配置 Webpack 3. 使用 Babel 编译 TypeScripta. 安装依赖b. 配置 Babelc. 配置 Webpack 使用 Babel 4. 使用 ESLint 和 TSLinta.…

复杂网络的任意子节点的网络最短距离

复杂网络的任意子节点的网络最短距离 题目要求介绍 本文算法测试用的数据集为空手道俱乐部,其中空手道俱乐部的数据集可通过这个链接进行下载•http://vlado.fmf.uni-lj.si/pub/networks/data/Ucinet/UciData.htm#zachary 摘要 本文旨在解决复杂网络中任意子节点…