Day19-JDBC
Posted 2月2日
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Day19-JDBC相关的知识,希望对你有一定的参考价值。
JDBC
数据库驱动
由数据库厂商提供,连接应用程序和数据库,如同显卡需要安装驱动
什么是JDBC
sun公司为了简化开发人员对于数据库的操作 ,提供了一个java操作数据库的规范,俗称JDBC
除java.sql
和javax.sql
还需要导入一个数据库连接包,需要和数据库版本相同
Java使用JDBC
六个步骤:
-
加载驱动
- Class.forName("com.mysql.cj.jdbc.Driver");
-
连接数据库DriverManager
- Connection connection = DriverManager.getConnection(url,userName,password);
-
获得执行sql的对象
- statement.executeQuery() //查询语句
- statement.executeUpdate() //修改更新删除
-
获得返回的结果集
- 该结果集为一个链表,拥有链表的所有功能
-
释放连接
package com.JDBC.Test1;
import java.sql.*;
public class JdbcFirstDeMO {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1.加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.用户信息和url
String url = "jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT%2B8";
String userName="root";
String password="cwt123456";
//3.创建数据库连接
Connection connection = DriverManager.getConnection(url,userName,password);
//4.创建sql执行对象
Statement statement = connection.createStatement();
//5.执行语句
String sql = "SELECT * FROM users";
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()){
System.out.println(resultSet.getObject("id"));
}
//6.释放连接
resultSet.close();
statement.close();
connection.close();
}
}
statement对象
用于向数据库发送sql语句,完成对数据库的增删改查
查询
Statement statement = connection.createStatement();
String sql = "SELECT * FROM users";
ResultSet resultSet = statement.executeQuery(sql);
修改、更新、删除
Statement statement = connection.createStatement();
String sql = "delete fr";
ResultSet resultSet = statement.executeQuery(sql);
sql注入
web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息
Preparedstament
继承了statement类,遇到转移字符时会自动进行忽略,安全性较高,跟statement的不同点:对sql语句进行预编译,再进行赋值
package com.JDBC.Test2;
import com.JDBC.Test2.utils.jdbcUtils;
import java.sql.*;
public class PreparedTest {
public static void main(String[] args) throws SQLException, ClassNotFoundException {
Connection connection = null;
PreparedStatement preparedStatement =null;
ResultSet resultSet = null;
String driver = "com.mysql.cj.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT%2B8";
String user = "root";
String password="cwt123456";
Class.forName(driver);
connection= DriverManager.getConnection(url,user,password);
String sql = "select * from users where `id` = ?";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1,1);
resultSet=preparedStatement.executeQuery();
while (resultSet.next()){
System.out.println("查询成功");
}
}
}
数据库连接池
连接释放操作十分消耗资源
池化技术
预备一些池连接,客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并标记为忙,如果没有空闲连接,则新建连接,使用完毕后,此连接返回池内,并可再次使用
原理
获取的是connection的代理对象,使用完毕后,释放该对象、
实现方案
实现DataSource接口
使用开源数据
DBCP
C3P0
Druid
使用数据库池连接之后,可以不写数据库连接代码,但无论使用什么数据源都需要实现DataSource接口
以上是关于Day19-JDBC的主要内容,如果未能解决你的问题,请参考以下文章