Jdbc笔记01

0、前言

本系列文章作为学习笔记出现,如有错误的地方还请各位批评指正。

如果有其他问题可以在本文后留言评论共同探讨。

jdbc笔记01

1、引入依赖

使用mysql-connector-java.jar包引入依赖

此处采用maven构建的方式来引入

xml 复制代码
<dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>9.1.0</version>
</dependency>

2、使用jdbc连接数据库

要获取一个 Connection 对象,需要使用 DriverManager 类的 getConnection 方法,传入数据库的 URL、用户名和密码。

java 复制代码
		//使用jdbc连接
		//这里的test写要连接的数据库的名称
		//serverTimezone是用于指定指定 MySQL 服务器时区
        String url = "jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai";
        String username = "root";
        String password = "root";
        try {
            //加载驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //获取连接
            Connection conn = DriverManager.getConnection(url,username,password);
            conn.close();
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

3、Statement

sql语句执行器

要创建一个 Statement 对象,首先需要通过 Connection 对象的 createStatement() 方法。

java 复制代码
Connection connection = DriverManager.getConnection(url, username, password);
Statement statement = connection.createStatement();
  • 执行查询操作时调用executeQuery()方法
java 复制代码
String sql = "SELECT id, name FROM users";
ResultSet rs = statement.executeQuery(sql);
while (rs.next()) {
	//使用列名得到对应数据
    int id = rs.getInt("id");
    String name = rs.getString("name");
	//使用下标得到对应数据 
	//注意在数据库中是从1开始的,第1列,第2列;而不像数组中是从0开始的
	id = rs.getInt(1);
    name = rs.getString(2);
    System.out.println("ID: " + id + ", Name: " + name);
}
  • 执行增改删操作时调用executeUpdate()方法,会返回影响的行数
java 复制代码
String_INSERT = "INSERT INTO users (name, age) VALUES ('John Doe', 30)";
int rowsInserted = statement.executeUpdate(_INSERT);

String_UPDATE = "UPDATE users SET age = 31 WHERE name = 'John Doe'";
int rowsUpdated = statement.executeUpdate(_UPDATE);

String_DELETE = "DELETE from users WHERE name = 'John Doe'";
int rowsDeleted = statement.executeUpdate(_DELETE);

4、关于sql注入

java 复制代码
Scanner sc = new Scanner(System.in);
String playerName = sc.nextLine();
playerName = "'" + playerName + "'";
//LIMIT是分页查询
String sql = "SELECT * FROM userdata WHERE playerName = " + playerName + "LIMIT 0,20";
Connection conn = DriverManager.getConnection(url,username,password);
Statement s = conn.createStatement();
ResultSet rs = s.executeQuery(sql);

正常情况:用户输入"小明",得到小明对应的一条数据。

sql注入:用户输入"小明' or 1 = '1",就会得到数据库前20条数据

为了避免sql注入我们常用:

  • ?占位符
  • 使用参数化查询

5、PreparedStatement

java 复制代码
String sql = "SELECT * FROM userdata WHERE userName = ?";
//创建预处理执行器
PreparedStatement ps = conn.prepareStatement(sql);
//设置占位符替换的值
//注意下标问题,从1开始
ps.setString(1,goodsName);
相关推荐
Lhan.zzZ3 小时前
笔记_2026.4.28_004
c++·ide·笔记·qt
HUGu RGIN3 小时前
MySQL--》如何在MySQL中打造高效优化索引
android·mysql·adb
wuminyu5 小时前
专家视角看Java字节码加载与存储指令机制
java·linux·c语言·jvm·c++
其实防守也摸鱼5 小时前
CTF密码学综合教学指南--第五章
开发语言·网络·笔记·python·安全·网络安全·密码学
callJJ6 小时前
Spring Data Redis 两种编程模型详解:同步 vs 响应式
java·spring boot·redis·python·spring
wbs_scy7 小时前
Linux线程同步与互斥(三):线程同步深度解析之POSIX 信号量与环形队列生产者消费者模型,从原理到源码彻底吃透
java·开发语言
Yeh2020587 小时前
Filter与Listener笔记
笔记
九成宫8 小时前
Git 与远程仓库实操记录:克隆、配置、分支推送与问题排查
笔记·git·ssh
jinanwuhuaguo8 小时前
(第三十三篇)五月的文明奠基:OpenClaw 2026.5.2版本的文明级解读
android·java·开发语言·人工智能·github·拓扑学·openclaw
东京老树根9 小时前
SAP学习笔记 - BTP SAP Build12 - SAP Build Content Package
笔记·学习