JDBC API简单解释

文章详细介绍了如何使用Java的JDBC进行数据库操作,包括注册驱动、建立连接、执行SQL(Statement与PreparedStatement的区别)、事务管理和防止SQL注入的方法。还提供了示例代码展示如何手动设置事务并处理异常情况。
摘要由CSDN通过智能技术生成

DriverManager

  • 注册驱动:DriverManger.registerDriver();

Class.forName()方法参数“com.mysql.jdbc.Driver”中Driver源码使用;

  • 获取数据库连接

DriverManager.getConnection(url,username,password);

  • url:连接路径jdbc:mysql://ip地址(域名):端口号/数据库名称?参数&参数...

注:参数useSSL表示是否安全连接方式

注:useServerPrepStmts表示是否开启预编译

  • username:用户名

  • password:密码

Connection

  • 获取执行sql的对象

  • Statement creatStatement(); //返回一个执行sql对象

  • PreparedStatement prepareStatement(sql);//预编译SQL的执行SQL对象:防止SQL注入

  • 管理事务(3个方法)

  • setAutoCommit(bool autoCommit); //true表示自动提交,false表示手动提交

  • commit(); //提交

  • rollback(); //回滚

  • 示例(使用try catch实现)

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import java.sql.Statement;

public class Main {

public static void main(String[] args) throws Exception {

//1.注册驱动

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

//2.获取连接

String url="jdbc:mysql://127.0.0.1:3306/stu?useSSL=false";

String username="root";

String password="123456";

Connection conn = DriverManager.getConnection(url,username,password);

//3.定义sql语句

String sql_code = "UPDATE student set english = 60 where sn='张三'";

//4.获取执行sql对象

Statement stmt = conn.createStatement();

try {

//设置手动提交

conn.setAutoCommit(false);

//5.执行sql语句

int answer = stmt.executeUpdate(sql_code);

//6.处理结果

System.out.println(answer);

//提交事务

conn.commit();

} catch (Exception e) {

//回滚事务

conn.rollback();

throw new RuntimeException(e);

}

//7.关闭连接

stmt.close();

conn.close();

}

}

Statement

  • int executeUpdate(sql); //执行DML、DDL语句

  • 返回值:受影响的行数

  • DDL语句成功后,返回值也可能为0

  • ResultSet executeQuery(sql);//执行DQL语句

  • 返回值:结果集对象

ResultSet

  • boolean next(); //光标从当前位置移动一行

  • true表示有数据,false表示没有数据

  • datatype getDatatype(参); //获取数据

  • 参数int:列的编号,1开始

  • 参数String:列的名称

  • 可将数据封装到ArrayList中进行调用

  • 示例:

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

public class jdbc01 {

public static void main(String[] args) throws Exception {

//1.注册驱动

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

//2.获取连接

String url="jdbc:mysql://127.0.0.1:3306/stu?useSSL=false";

String username="root";

String password="123456";

Connection conn = DriverManager.getConnection(url,username,password);

//3.定义sql语句

String sql_code = "select id,sn,sex from student;";

//4.获取执行sql对象

Statement stmt = conn.createStatement();

try {

//设置手动提交

conn.setAutoCommit(false);

//5.执行sql语句

ResultSet ans = stmt.executeQuery(sql_code);

//6.处理结果

while(ans.next()){

int a = ans.getInt("id");

String b = ans.getString(2);

String c = ans.getString(3);

System.out.println(a+"\t"+b+"\t"+c);

}

//提交事务

conn.commit();

} catch (Exception e) {

//回滚事务

conn.rollback();

throw new RuntimeException(e);

}

//7.关闭连接

stmt.close();

conn.close();

}

}

PrepareStatement

  • 防止SQL注入

  • 将密码设置为 'or'1'='1 得到SQL语句为:

select * from userinfo where user_name = 'hfkjsfhsky'and password = ''or'1'='1'

  • 前面返回值为0,后面返回值为1,返回结果为全部数据

  • PrepareStatement

  • 获取PrepareStatement对象

  • conn.prepareStatement(sql);

  • 此时sql语句需要设置为:select * from userinfo where user_name = ? and password = ?

  • PrepareStatement对象参数设置:setXxx(参数1,参数2)

  • 参数1表示第一个?的值,第二个参数表示第二个?的值

  • 防止注入原理:对特殊字符进行转译,不改变语义

  • 优点

  • 预编译机制,性能高

#预编译需要在url参数中开启

#SQL底层中,检查SQL语法和编译SQL比较耗时,开启预编译后,该步骤只执行一次,提高了执行性能

  • 防止SQL注入

  • 配置MySQL执行日志(需重启mysql服务)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值