栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JDBC的学习笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JDBC的学习笔记

JDBC

全称

java DataBase Connectivity java平台提供的一种统一的执行规范/标准

每一个不同的厂商生产的数据库产品(比如mysql等) 都实现了这个规范

作用:

  1. 负责产生连接
  2. 传送SQL指令
  3. 处理响应信息
  4. 处理事务

JDBC驱动

驱动有不同的类型,四种:

  • JDBC-ODBC 每一个客户机都需要安装 管理不方便
  • JDBC-Native 类似第一种,每个客户机都需要安装,调用本地的c/c++语言,具体到某一个数据库,想要改变,需要改写底层的实现
  • JDBC-Net 使用了标准的Socket通信,不需要每一个客户机都安装,相对来说比较灵活
  • 纯JavaJDBC 一个纯粹基于Socket进行的通信,不需要安装在客户机上,不同的厂商需要下载。

找到MySQL数据库的JDBC驱动包

下载驱动包

如何使用JDBC

JDBC六部曲

  1. 导包,将找到的jar文件包导入到java工程
  2. 加载驱动类,Driver
  3. 获取连接
  4. 创建状态参数
  5. 执行数据库操作

写 DML---增删改 统称为对数据库进行更新

读 DQL---select 数据库没有发生变化,需要处理结果

  1. 关闭

例子:

package testjdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class TestJDBC {
    public static void main(String[] args) {
//1.导包,将找到的jar文件包导入到java工程
        
//2.加载驱动类,Driver
        
        try {
            Class.forName("com.mysql.jdbc.Driver");
//3.获取连接
            String url = "jdbc:mysql://localhost:3306/emp";
            String username = "root";
            String password = "root";
            Connection conn = DriverManager.getConnection(url, username, password);

//4.创建状态参数*
            Statement stat = conn.createStatement();
//5.执行数据库操作
            String sql = "delete from dept where deptno=50";
            stat.executeUpdate(sql);
            System.out.println("=======");
//    写 DML---增删改      DDL  统称为对数据库进行更新int = stat.executeUpdate(String sql)
//    读 DQL---select   数据库没有发生变化,需要处理结果ResultSet rs = stat.executeQuery(String sql)
            
//    调用存储过程------execute(String sql)
//6.关闭     close()
//          rs.close()//用到了结果集的话,结果集也要关
            stat.close();
            conn.close();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        }
}

对于上面jdbc的执行过程,在创建状态参数的时候会出现SQL注入的问题。

先了解一下什么是SQL注入?

1.SQL注入

通过SQL命令 拼接其它特殊字符串,让其他的字符串来改变原有SQL语句的执行,达到欺骗服务器的效果。其他字符:肯定时SQL语法认可的合法关键字

2.问题产生原因

  • 判断不严谨
  • SQL语句的问题,因为它允许拼接字符串,拼接的时候容易出现问题。

3.如何解决

  • 首先了解PreparedStatement和Statement 的区别

1.PreparedStatement extends Statement

2.Statement:普通的状态参数,在创建的时候不需要SQL语句,此时没有执行

3.PreparedStatement:预处理状态参数,创建的时候就需要预先加载SQL语句,此时没有执行,但是,底层预先处理了SQL需要的查询结果,性能很高,可以利用?来替代数据类型和值

好处:增强可读性 可以参数动态化 防止SQL注入 提高执行性能

  • 怎么写?
String sql = "SELECT ANAME,APASSWORD,ABALANCE FROM ATM WHERe ANAME = ?";

Class.forName(driver);
Connection conn = DriverManager.getConnection(url, user, password);
PreparedStatement pstat = conn.prepareStatement(sql);
pstat.setString(1, aname);//sql语句与进行拼接处理,?赋值为aname
用?来替代值和类型,注意:SQL语句上的问号需要在执行操作之前赋值。
pstat.setxxxx(index,value) index从一开始(代表第几个问号)

使用了预处理状态参数之后 模糊查询的问题

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/894809.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号