首页 > 其他分享 >JDBC学习

JDBC学习

时间:2024-08-17 17:40:24浏览次数:13  
标签:JDBC String rs 学习 close password id name

基础概念

DBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据。JDBC代表Java数据库连接。

简单使用

import java.sql.*;

public class JDBCExample {
    public static void main(String[] args) {
        try {
            // 1. 加载驱动程序
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 2. 建立数据库连接
            String url = "jdbc:mysql://localhost:3306/test_db";
            String username = "root";
            String password = "password";
            Connection conn = DriverManager.getConnection(url, username, password);

            // 3. 执行 SQL 语句
            String sql = "SELECT * FROM users";
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery(sql);

            // 4. 处理结果集
            while (rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                System.out.println("ID: " + id + ", Name: " + name);
            }

            // 5. 关闭资源
            rs.close();
            stmt.close();
            conn.close();
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
    }
}

预编译的原理

在java中JDBC中,我们写 SQL 语句的时候,有个预处理功能,这个功能一大优势就是能提高执行速度,尤其是多次操作数据库的情况,再一个优势就是预防SQL注入,严格的说,应该是预防绝大多数的SQL注入。

简单使用

如下面的代码

import java.sql.*;

public class PreparedStatementExample {
    public static void main(String[] args) {
        try {
            // 1. 加载驱动程序
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 2. 建立数据库连接
            String url = "jdbc:mysql://localhost:3306/test_db";
            String username = "root";
            String password = "password";
            Connection conn = DriverManager.getConnection(url, username, password);

            // 3. 创建预编译语句
            String sql = "SELECT * FROM users WHERE name = ?";
            PreparedStatement pstmt = conn.prepareStatement(sql);

            // 4. 设置参数
            pstmt.setString(1, "John Doe");

            // 5. 执行查询
            ResultSet rs = pstmt.executeQuery();

            // 6. 处理结果集
            while (rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                System.out.println("ID: " + id + ", Name: " + name);
            }

            // 7. 关闭资源
            rs.close();
            pstmt.close();
            conn.close();
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
    }
}

底层原理

当运行时,JDBC动态地把参数传给PreparedStatement时,即使参数里有敏感字符,如: ' or ' 1' = '1 、updatexml(2,concat(0x7e,(version())),0)等,preparedStatement 会对入参中的关键字进行转义,比如单引号转义成',其流程大致如下:

标签:JDBC,String,rs,学习,close,password,id,name
From: https://www.cnblogs.com/Ho1dF0rward/p/18364684

相关文章

  • Linux学习之文件操作
    程序点击查看代码/*创建命令行参数输入名字的文件存储用户输入的学生姓名年龄和成绩*/#include<stdio.h>#include<unistd.h>#include<stdlib.h>#include<string.h>#include<fcntl.h>#include<sys/types.h>#include<sys/stat.h>structStude......
  • 误闯机器学习(第一关-概念和流程)
    以下内容,皆为原创,实属不易,请各位帅锅,镁铝点点赞赞和关注吧!好戏开场了。一.什么是机器学习        机器学习就是从数据中自动分析获取模型(总结出的数据),并训练模型,去预测数据。    内心独白:就好比我们人从日常生活中,归纳总结得出经验。利用总结的经验去得出......
  • 1.Markdown学习
    Markdown学习标题三级标题四级标题字体Helloworld!Helloworld!Helloworld!Helloworld!引用学习,学习,还是他妈的学习分割线图片![截图](C:\Users\zhangzhiwei\OneDrive-zju.edu.cn\图片\相机备份\24五一台州\IMG_20240504_104710.jpg)超链接点击跳转到zh......
  • GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代
        ......
  • Linux学习笔记:systemd配置文件
    本文更新于2024-08-15,使用systemd252,操作系统为Debian12.6(bookworm)。以为Nginx编写配置文件为例,配置文件路径为/lib/systemd/system/nginxd.service(亦即服务名为nginxd),所有者为root,权限通常为0644。文件内容如下:[Unit]Description=NginxAfter=network.target[Service]......
  • GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代
       ......
  • 【WOA-CNN-LSTM】基于鲸鱼算法优化深度学习预测模型的超参数研究(Matlab代码实现)
     ......
  • 董宇辉英语课程学习有感
     有幸学习了董宇辉英语课程,从高一到大学四六级的10几套课程,整整200多节课,还没来得及看完。只看了部分,就这一套高中全程班的课程来说,确实是讲得好,不愧名师风范,由浅入深,细致入微,循循善诱,内容详细又实用,说是提分神器毫不夸张。客观地讲,听过董老师这样名师课程的孩子,相比普通的接受......
  • MarkDown 学习第一天
    MarkDown学习今天是学习如何使用MarkDown第一天标题二级标题三级标题以上是#号键加空格形成。接下来是字体。字体helloworldhelloworldhelloworldhelloworldhelloworld可以通过加*号和加~线变成以上几种样式引用狂神说java,坚持每一天都学习。>号加空格分割线......
  • 算法学习笔记-----图论基础
    基础知识两种存储方式:邻接矩阵、邻接表。两种遍历:dfs,bfs。图的遍历考虑深搜,发现出现环的情况进行不下去。一种可行的方案是反向建边后从最后一个点往后开始dfs或bfs。#include<bits/stdc++.h>#defineendl'\n'usingnamespacestd;constintmaxn=1e5+3;v......