jdbc操作数据库MySQL

mysql创建class表

往数据库中使用代码插入一条数据

step1.创建DataSource

 DataSource dataSource = new MysqlDataSource();((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java109?characterEncoding=utf8&usessL=false");((MysqlDataSource)dataSource).setUser("root");((MysqlDataSource)dataSource).setPassword("123456");

使用java.sql包下的DataSource

//1.先创建 DataSource
DataSource dataSource=new MysqlDataSource();
((MysqlDatasource)datasource).setUrl()

不直接使用 MysqlDataSource new一个对象,是防止其扩散,实现低耦合

setUrl里面路径的解释

连接上MySQL服务器

 ((MysqlDataSource)dataSource).setUrl(
"jdbc:mysql://127.0.0.1:3306/java109
?characterEncoding=utf8&usessL=false");

找到用户名和密码

((MysqlDataSource)dataSource).setUser("root");((MysqlDataSource)dataSource).setPassword("123456");

step2.和数据库建立连接

选择Connection包

处理getConnection异常

选择Connection包

step3.构造sql

java中不需要写分号(;)

PreparedStatement

使用?占位符输入

step4.把sql发送到服务器

n 代表着影响着几行

step5.释放资源,关闭连接

释放顺序 (后写的先释放-记得是这样)

完整代码

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;// 通过这个代码, 往数据库的表中, 插入一行记录.
public class Demo1 {public static void main(String[] args) throws SQLException {Scanner scanner = new Scanner(System.in);System.out.println("请输入学号: ");int id = scanner.nextInt();System.out.println("请输入姓名: ");String name = scanner.next();// 1. 先创建 DataSourceDataSource dataSource = new MysqlDataSource();((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java109?characterEncoding=utf8&useSSL=false");((MysqlDataSource) dataSource).setUser("root");((MysqlDataSource) dataSource).setPassword("2222");// 2. 建立和数据库服务器之间的连接. 连接好了之后, 才能进行后续的 请求-响应 交互.Connection connection = dataSource.getConnection();// 3. 构造 sql (代码中的 sql 不需要写 ; )// String sql = "insert into student values(" + id + ", '" + name + "')";// String sql = "delete from student where id = 1";// String sql = "update student set name = '张三' where id = 100";String sql = "insert into student values(?, ?)";PreparedStatement statement = connection.prepareStatement(sql);statement.setInt(1, id);statement.setString(2, name);System.out.println("sql = " + statement);// 4. 把 sql 发给服务器. 返回值是一个整数, 表示影响到的行数.int n = statement.executeUpdate();System.out.println("n = " + n);// 5. 释放资源, 关闭连接. 释放顺序, 是后获取到的资源, 先释放.statement.close();connection.close();}
}

陌生知识

PrepareStatement

PreparedStatement是 Java 中用于执行预编译 SQL 语句的接口,它是 JDBC(Java Database Connectivity)的一部分,主要有以下作用和特点:

一、提高性能

  1. 预编译 SQL 语句
    • 当使用PreparedStatement时,数据库会预先编译 SQL 语句的模板,这个模板中可以包含占位符(通常用?表示)。这样,对于相同结构的 SQL 语句,数据库只需要编译一次,后续只需要将具体的值替换到占位符中执行即可。
    • 例如,对于一个插入用户信息的 SQL 语句INSERT INTO users (name, age) VALUES (?,?),数据库首先对这个语句模板进行编译,而不是每次插入不同用户信息时都重新编译整个 SQL 语句。
  2. 减少编译次数
    • 在执行大量类似 SQL 语句的情况下,相比使用普通的StatementPreparedStatement可以大大减少数据库的编译开销,从而提高性能。比如在一个循环中多次执行插入操作,如果使用Statement,每次循环都要编译不同的 SQL 语句(即使语句结构相似,只是具体值不同),而PreparedStatement只需编译一次模板。

二、防止 SQL 注入

  1. 自动处理特殊字符
    • PreparedStatement会自动对传入的参数值进行转义处理,使得恶意用户无法通过输入特殊的 SQL 片段来篡改原本的 SQL 语句意图。
    • 例如,如果用户输入的用户名中包含了可能被解释为 SQL 命令的字符,PreparedStatement会将其视为普通数据进行处理,而不会将其误解为 SQL 代码的一部分。
  2. 安全的参数设置
    • 通过setXxx方法(如setStringsetInt等)来设置参数值,而不是将参数值直接拼接在 SQL 字符串中。这样可以确保参数值被正确地处理和传递给数据库,避免了 SQL 注入攻击的风险。比如,以下代码是正确使用PreparedStatement防止 SQL 注入的示例:
   String sql = "SELECT * FROM users WHERE username =? AND password =?";PreparedStatement pstmt = connection.prepareStatement(sql);pstmt.setString(1, username);pstmt.setString(2, password);ResultSet rs = pstmt.executeQuery();
  • 在这里,即使攻击者试图在usernamepassword中输入恶意的 SQL 代码,PreparedStatement也会将其作为普通数据处理,不会执行恶意代码。

三、代码可读性和可维护性

  1. 清晰的代码结构
    • 使用PreparedStatement时,代码结构更加清晰和易于理解。将 SQL 语句和参数设置分开,使得代码逻辑更加清晰。
    • 例如,上述防止 SQL 注入的代码示例中,首先定义了 SQL 语句模板,然后清晰地设置了两个参数的值,相比于将参数直接拼接在 SQL 字符串中,这样的代码更容易阅读和维护。
  2. 方便的参数设置
    • PreparedStatement提供了一系列的setXxx方法来设置不同类型的参数,这些方法的命名规范且易于使用。可以根据参数的实际类型选择合适的方法,避免了手动进行类型转换和字符串拼接的繁琐过程。例如,对于不同类型的参数设置代码如下:
   // 设置字符串类型参数pstmt.setString(1, "John");// 设置整数类型参数pstmt.setInt(2, 30);// 设置日期类型参数pstmt.setDate(3, new java.sql.Date(someDate.getTime()));
  • 这样的代码使得参数设置更加规范和方便,提高了代码的可维护性。

Connection

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

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

相关文章

2024十大网站设计公司推荐TOP10

一个精心设计的网站对于企业来说不仅是品牌形象的延伸,也是吸引客户、提升业务的关键工具。 而选择一家专业的网站设计公司,不仅可以帮助企业在激烈的市场竞争中脱颖而出,还能收获更多的客流量,以下是我们精选的十大网站设计公司…

LVS负载均衡+集群+三种工作模式+调度算法及实战案例

一、LVS 1.1简介 LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩主导开发的开源负载均衡项目,目前,LVS已经被集成到Linux内核模块中。该项目实现了在基于IP的数据基础上,请求负载均衡调度方案&a…

git推送错误-->远程分支比本地的分支更新,无法直接推送

每次上传本地修改好的代码的时候,十次有八次都会出现这样的问题!!(暴躁!!!) 现在写个帖子记录一下,这个问题目前我还没有解决,欢迎懂的佬指点一下. 情景: 我在本地仓库做了一些代码的修改,准备上传到远程仓库上,下边是上传步骤: git add . # 将所有的修改都提交到缓冲区git …

工作随记:oracle中偶发遇到存储过程编辑,删除等卡死问题

文章目录 一、查询session是否占用二、通过对象名称定位对应SID三、通过对应的SID查询session信息四、kill掉session 最近有几个客户也询问过:我的存储过程怎么编译、调试有时候就卡死不动了,而且还没办法删除,本次又碰到实际情况&#xff0c…

sql及rce漏洞整理

sql及rce漏洞复现 一&#xff0c;mysql小特性解决大问题 <?php $mysqli new mysqli("localhost", "root", "root", "cat"); ​ /* check connection */ if ($mysqli->connect_errno) {printf("Connect failed: %s\n&qu…

前端面试题整合

一、HTML篇 1、简述一下你对HTML语义化的理解&#xff1f; 用正确的标签做正确的事情&#xff1b; HTML语义化让页面内容结构清晰&#xff0c;便于浏览器、搜索引擎解析&#xff1b; 搜索引擎的爬虫依赖HTML标记来确定上下文和关键字的权重&#xff0c;利于SEO&#xff1b; 便于…

JavaScript - 数组对象中实用好玩的reduce方法

JavaScript中reduce() 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行)&#xff0c;将其结果汇总为单个返回值。 语法&#xff1a; arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue]) 参数配置&#xff1a; 参数名描述cal…

渗透学习之漏洞复现

漏洞 贷齐乐的漏洞复现RCE 贷齐乐的漏洞复现 <?php header("Content-type: text/html; charsetutf-8"); require db.inc.php;function dhtmlspecialchars($string) {if (is_array($string)) {foreach ($string as $key > $val) {$string[$key] dhtmlspecial…

【Oracle点滴积累】解决ORA-20001: Latest xml inventory is not loaded into table故障的方法

广告位招租&#xff01; 知识无价&#xff0c;人有情&#xff0c;无偿分享知识&#xff0c;希望本条信息对你有用&#xff01; 今天和大家分享在安装Oracle Critical Patch Update (Patch Number:33806138) 遇到ORA-20001: Latest xml inventory is not loaded into table故障…

广东盈致MES系统——注塑和冲压行业的智能化管理

广东注塑冲压行业MES制造执行系统是一种专门为注塑和冲压行业设计的生产管理系统&#xff0c;可以帮助企业实现生产过程的智能化管理和优化。盈致MES系统是一种常见的MES系统&#xff0c;具有以下特点和功能&#xff1a; 生产计划和调度&#xff1a;MES系统可以帮助企业进行生产…

SpringCloud网关

1.网关的作用 2.网关入门 2.1引入依赖 <dependencies><dependency><groupId>com.heima</groupId><artifactId>hm-common</artifactId><version>1.0.0</version></dependency><!--网关--><dependency><g…

SAP通过函数TR_RELEASE_REQUEST释放指定请求

一&#xff1a;不通过SE09/10释放请求号 *&---------------------------------------------------------------------* *& Report Z_TRANSPORT_REQUEST *&---------------------------------------------------------------------* *& *&----------------…

AI与人类智慧的共舞:程序员在人工智能时代的新角色

文章目录 每日一句正能量前言AI辅助编程对程序员工作的影响提高编码效率改善代码质量促进学习与成长改变工作流程潜在风险与挑战技术伦理与责任应对策略结论 程序员应重点发展的核心能力复杂系统设计能力跨学科知识整合能力与AI协作的能力创新和解决问题的能力技术领导力和团队…

ctfshow-web入门-sql注入(web206-web210)系统练习sqlmap之tamper的使用与编写

目录 1、web206 2、web207 3、web208 4、web209 5、web210 1、web206 sql需要闭合 测了一下还是会先请求 /api/getToken.php 查询语句里新增了括号&#xff0c;我们注入也需要将其闭合掉&#xff0c;就像我们闭合单引号那样&#xff0c;对于 sqlmap 它会自动对闭合点进行…

HttpSession常用方法

1.HttpSession常用方法 是在Java Servlet中用来管理会话状态的重要接口&#xff0c;它提供了一种在多个请求或页面之间存储用户特定信息的方式。以下是一些 HttpSession 常用的方法和用法&#xff1a; 获取会话对象&#xff1a; HttpSession session request.getSession();…

三十八、大数据技术之Kafka3.x(1)

&#x1f33b;&#x1f33b; 目录 一、Kafka 概述1.1 定义1.2 消息队列1.2.1 消息队列内部实现原理1.2.2 传统消息队列的应用场景1.2.3 消息队列的两种模式 1.3 Kafka 基础架构 二、 Kafka 快速入门2.1 安装前的准备2.2 安装部署2.2.1 集群规划2.2.2 单节点或集群部署2.2.3 集群…

浙大数据结构慕课课后题(04-树5 Root of AVL Tree)

题目要求&#xff1a; AVL 树是一种自平衡的二叉搜索树。在 AVL 树中&#xff0c;任何节点的两个子子树的高度最多相差一;如果在任何时候它们相差不止一&#xff0c;则进行重新平衡以恢复此属性。图 1-4 说明了旋转规则。 图1 图2 图3 图4 现在给定一系列插入&#xff0c;您应该…

【经验总结】ShardingSphere5.2.1 + Springboot 分库分表 快速开始

Sharding Sphere 官方文档地址&#xff1a; https://shardingsphere.apache.org/document/current/cn/overview/maven仓库&#xff1a;https://mvnrepository.com/artifact/org.apache.shardingsphere/shardingsphere-jdbc 官方的文档写的很详尽到位&#xff0c;这里会截取部分…

Spring事务管理:程序化 vs 声明式

Spring事务管理&#xff1a;程序化 vs 声明式 1、程序化事务管理2、声明式事务管理3、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; Spring框架为事务管理提供了两种主要方式&#xff1a;程序化事务管理和声明式事务管理。 1、程序化…

【数据结构】六、图:3.十字链表、邻接多重表、边集数组

3.十字链表&#xff08;有向图&#xff09; 文章目录 3.十字链表&#xff08;有向图&#xff09;3.1性能分析 4.邻接多重表&#xff08;无向图&#xff09;4.1性能分析 5.边集数组 十字链表是有向图的一种链式存储结构。 不足 对于有向图来说&#xff0c;邻接表是有缺陷的。了…