JDBC -- API
创始人
2024-04-30 03:06:17

目录

DriverManager 驱动管理类

作用

注册驱动

获取数据库连接

Connection 数据库连接对象

作用

获取执行SQL的对象

管理事务

Statement

作用

执行SQL语句

ResultSet 结果集对象

作用

封装了DQL查询语句的结果

获取查询结果

PreparedStatement

作用

预编译SQL语句并执行:预防SQL注入问题

使用

好处

原理


DriverManager 驱动管理类

作用

注册驱动

Class.forName("com.mysql.jdbc.Driver");

查看源码

TIP:

MySQL 5之后的驱动包,可以省略注册驱动的步骤

自动加载jar包中META-INF/services/java.sql.Driver文件中的驱动类

获取数据库连接

DriverManager.getConnection( String url,String username,String password);

1. url:连接路径

语法: jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2...

示例: jdbc:mysql://127.0.0.1:3306/test1

细节:

  • 如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则ur可以简写为: jdbc:mysql:///数据库名称?参数键值对
  • 配置useSSL=false参数,禁用安全连接方式,解决警告提示

2.username:用户名

3.password:密码

Connection 数据库连接对象

作用

获取执行SQL的对象

普通执行SQL对象

Statement createStatement()

预编译SQL的执行SQL对象:防止SQL注入

PreparedStatement prepareStatement (sql)

执行存储过程的对象

CallableStatement prepareCall (sql)

管理事务

MySQL事务管理

开启事务:BEGIN; / START TRANSACTION;

提交事务:COMMIT;

回滚事务:ROLLBACK;

MySQL默认自动提交事务

JDBC 事务管理: Connection接口中定义了3个对应的方法

开启事务: setAutoCommit(boolean autoCommit): true为自动提交事务;false为手动提交事务,即为开启事务

提交事务:commit()

回滚事务:rollback()

一般情况配合try/catch来使用

        //3.定义SQLString sql = "update a set score=100 where id = 4";//4.获取执行sql的对象 StatementStatement stmt = conn.createStatement();try {//开启事务conn.setAutoCommit(false);//5.执行sqlint count = stmt.executeUpdate(sql);//6.处理结果System.out.println(count);//提交事务conn.commit();} catch (Exception e) {//回滚事务conn.rollback();e.printStackTrace();}

Statement

作用

执行SQL语句

int executeUpdate(sql):执行DML、DDL语句

返回值:

(1) DML语句影响的行数

(2) DDL语句执行后,执行成功也可能返回0(删除数据库后,虽然删除成功也返回0)

    //3.定义SQL
//        String sql = "update a set score=100 where id = 4";
//        String sql = "create database abc";String sql = "drop database abc";//4.获取执行sql的对象 StatementStatement stmt = conn.createStatement();//5.执行sqlint count = stmt.executeUpdate(sql);//6.处理结果
//        System.out.println(count);if (count>0){System.out.println("修改成功!");}else {System.out.println("修改失败!");}

ResultSet executeQuery(sql):执行DQL语句

返回值:ResultSet结果集对象

ResultSet 结果集对象

作用

封装了DQL查询语句的结果

ResultSet stmt.executeQuery(sql):执行DQL语句,返回ResultSet对象

获取查询结果

boolean next():(1)将光标从当前位置向前移动一行 (2)判断当前行是否为有效行

返回值:

true:有效行,当前行有数据.

false:无效行,当前行没有数据

xxx  getXxx(参数):获取数据

xxx:数据类型;如:int getlnt(参数) ; String getString(参数)

参数:

  • int:列的编号,从1开始.
  • String:列的名称
        //3.定义SQLString sql = "select * from a";//4.获取Statement对象Statement stmt = conn.createStatement();//5.执行sqlResultSet rs = stmt.executeQuery(sql);//6.处理结果,遍历rs中的所有数据//6.1光标向下移动一行,并且判断当前行是否有效数据while (rs.next()) {//6.2 获取数据
//            int id =rs.getInt(1);
//            String score  = rs.getString(2);int id = rs.getInt("id");String score = rs.getString("score");System.out.println(id);System.out.println(score);System.out.println("--------");}

输出结果

PreparedStatement

作用

预编译SQL语句并执行:预防SQL注入问题

SQL注入:通过操作输入来修改事先定义的SQL语句,用以表达执行代码对服务器进行攻击的方法

sql注入示例

String pwd = "'  or '1' = '1";

 //接收用户输入的用户名密码String name ="zhangsan";
//        String pwd = "123";String pwd = "'  or '1' = '1";//定义sqlString sql = "select * from user where name ='"+name+"' and pwd ='"+pwd+"'";//获取stmt对象Statement stmt = conn.createStatement();//执行sqlResultSet rs = stmt.executeQuery(sql);

使用

①获取 PreparedStatement对象

//SQL语句中的参数值,使用?占位符替代

String sql = "select * from user where username = ? and password = ?";

//通过Connection对象获取,并传入对应的sql语句

PreparedStatement pstmt = conn.prepareStatement(sql);

②设置参数值

PreparedStatement对象: setXxx(参数1,参数2):给﹖赋值

Xxx:数据类型;如setInt (参数1,参数2)

参数:

参数1:?的位置编号,从1开始

参数2:?的值

③执行SQL

executeUpdate(); / executeQueryo(); :不需要再传递sql

        //接收用户输入的用户名密码String name ="zhangsan";
//        String pwd = "123";String pwd = "'  or '1' = '1";//定义sqlString sql = "select * from user where name = ? and pwd = ?";//获取pstmt对象PreparedStatement pstmt = conn.prepareStatement(sql);//设置?的值pstmt.setString(1,name);pstmt.setString(2,pwd);//执行sqlResultSet rs = pstmt.executeQuery();if (rs.next()){System.out.println("登录成功!");}else {System.out.println("登录失败");}

好处

1.预编译SQL,性能更高

2.防止SQL注入:将敏感字符进行转义

原理

1.在获取PreparedStatement对象时,将sql语句发送给mysql服务器进行检查,编译(这些步骤很耗时)

2执行时就不用再进行这些步骤了,速度更快

3.如果sql模板一样,则只需要进行一次检查、编译

相关内容

热门资讯

北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...