一、引言

JDBC就是Java Database Connectivity 就是Java连接数据库,可以使用Java语言连接数据库完成CRUD(CRUD是指增加Create、读取Retrieve、更新Update、删除Delete)操作

二、JDBC-API

JDBC-API就是一个标准的SQL数据库访问界面,JDBC-API定义了一系列Java类,用来表数据库连接、SQL语句、结果集、
数据库元数据等。
java.sql.DriverManager;//完成驱动程序的安装和建立新的数据库连接

java.sql.Connection;//数据库的连接,通过

Connection connection = DriverManager.getConnection(url,user,password)

java.sql.Statement;//表示管理再一指定数据库连接上的SQL语句的执行,通过

Statement statement = connection.createStatement();

java.sql.ResultSet;//保存查询语句的查询到的结果集

ResultSet resultSet = statement.executeQuery(sql);

java.sql.PreparedStatement;//解决sql查询语句注入的问题对于特殊意义的字符加上斜杠(/)来编译
在这里插入图片描述

2.2 MySql数据库驱动

mysql-connector-java-8.1.X适用于8.X版本

三、环境搭建

  1. 在项目下右键新建lib文件,用于存放jar文件
  2. 将mysql驱动mysql-connector-java-8.1.X复制到项目的lib文件夹中
  3. 选中lib文件夹右键Add as Library

四、JDBC开发步骤

3.1 注册驱动
 Class.forName("com.mysql.cj.jdbc.Driver");
3.2 连接数据库

通过

String url = "jdbc:mysql://localhost:3308/database";
String user = "root";
String password = "123456";
Connection connection = DriverManager.getConnection(url,user,password)
3.3 获取发送SQL的对象

通过Connection对象获取Statement对象,用于对数据库进行通用访问

Statement statement = connection.createStatement();
3.4 执行SQL语句

DML语句:增删改时,返回受影响的行数

String sql = "insert into t_jobs(id,username,password) values(1,'lili','2222');";
int result = statement.executeUpdate(sql);

DQL语句:查询时,返回结果数据(ResulttSet结果集)

 String sql = "select * from t_jobs where id = 1;";
 ResultSet resultset = statement.executeQuery(sql);
 if(resultset.next()){
	int id = resultset.getInt("id");
	String username = resultset.getString("username");
	String password = resultset.getString("password");
	Person person = new Person(id,username,password);
	reture person;
}
3.5 处理结果、释放资源
resultset.close();
statement.close();
conn.close();

五、SQL注入问题

5.1 存在的问题

如下从控制台输入username和password查询,如果用以上方式查询
在这里插入图片描述
sql语句中包含:“or 1=1 ; #”,
or 后面1=1一定为真,所以相当于执行代码 select * from t_user ;
sql语句分号表示结束,#表示注释,后面代码不会显示

5.2 preparedStatement

在这里插入图片描述

使用PreparedStatement,它继承了Statement接口
JDBC中sql语句所有的参数都由?符号占位,被称为参数标记。在执行SQL语句之前,必须为每个参数提供值。
通过preparedstatement.setXxx(下标,值),进行动态参数绑定

Class.forName("com.mysql.cj.jdbc.Driver");
Connection connection = DriverManager.getConnection(url,user,password);
String sql = "insert into Person(name,password) values(?,?);";
//id是PRIMARY KEY AUTO_INCREMENT,自动增长的
PreparedStatement preparedstatement = connection.preparedStatement(sql);
//sql里面的2个?占位符
preparedstatement.setString(1,'xiaobai');
preparedstatement.setString(2,'23343');
int result = preparedstatement.executeUpdate();
return result;

在这里插入图片描述

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐