JDBC安装使用

1.JDBC概述

  1. 是Java和数据库之间的一个桥梁
  2. 是一个规范而不是一个实现,能够执行SQL语句
  3. 它由一组用Java语言编写的类和接口组成
  4. 各种不同类型的数据库都有相应的实现的

2.配置JDBC

JDBC-Connector下载地址,若MySQL版本为8以上,则下载版本为8以上的驱动

导入IDEA的Global Libraries每个Moudles使用时只需调用即可
GLOBAL LIBRARIES
Modules目录下

3.建立连接

1
2
// 1.通过反射加载驱动
Class.forName("com.mysql.jdbc.Driver");
1
2
3
4
// 2.连接需要提供的三件套
String url = "jdbc:mysql://localhost:3306/数据库名称?userUnicode=true&characterEncoding=字符集&useSSL=true";
String name = "用户名";
String pass = "密码";
1
2
// 3.建立数据库连接
Connection con = DriverManager.getConnection(url, name, pass);
1
2
// 4. 获取sql对象 此对象用于对sql数据的操纵
Statement statement = con.createStatement();
1
2
// 5.sql查询语句
String sql = "这里写sql语句";
1
2
// 6.通过statement读取sql语句转换为java对象
ResultSet resultSet = statement.executeQuery(sql);
1
2
3
4
// 7.数据调用输出
while (resultSet.next()){
System.out.println(resultSet.getXxx("字段名"));
}
1
2
3
4
// 8.释放资源
resultSet.close();
statement.close();
con.close();

4.Utils类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private static String driver = null,String url = null;
private static String username = null,String password = null;
//静态代码块 随着类的加载而加载
static {
//存在异常,需TryCatch
//1.通过类的加载器获取配置文件
InputStream in = 本类类名.class.getClassLoader().getResourceAsStream("配置文件名.properties");
//2.读取配置文件
Properties pis = new Properties();
pis.load(in);
//2.1加载登录参数
driver = pis.getProperty("driver");
url = pis.getProperty("url");
username = pis.getProperty("username");
password = pis.getProperty("password");
//2.2驱动只用加载一次
Class.forName(driver);
}
1
2
3
4
//3.创建连接
public static Connection getConnection() throws Exception{
return DriverManager.getConnection(url, username, password);
}
1
2
3
4
5
6
7
//4.关闭流
public static void CloseConnection(Connection con, Statement sta, ResultSet rst){
//最好判断一下每个资源是否为null
con.close();
sta.close();
rst.close();
}

5.SQL注入

  1. Statement主要用于向数据库发送sql语句
  2. 增删改使用excute update
  3. 查询使用excute query
  4. excute以上都可,执行时间会增长
  • PreparedStatement和statement的区别
  • 前者更安全不会被sql注入,后者则相反
  • 同时前者继承了后者

5.1Statement使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public void loginTest() throws Exception {
//user_login("Cherry","123456");
//sql注入问题 通过特殊的字符串拼接盗取所有数据
user_login(" 'or ' 1=1","'or ' 1=1");
}
//用户校验
public void user_login(String name,String pass) throws Exception{
Connection con = JDBC_Util.getConnection();
Statement statement = con.createStatement();

String sql = "select * from 数据库.表名 where 字段名 ='"+name+"' and 字段名='"+pass+"'";
ResultSet rss = statement.executeQuery(sql);
while (rss.next()){
System.out.println(rss.getObject("NAME"));
System.out.println(rss.getObject("PASSWORD"));
}
JDBC_Util.CloseConnection(con,statement,rss);
}

5.2PreparedStatement使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 安全的用户校验
public static void user_login(String name,String password) throws Exception {
Connection con = JDBC_Util.getConnection();
//使用PreparedStatement可以很好的避免Sql注入
//会把传入进来的参数当作字符,假设其中存在转义字符,会被直接转义
String sql = "select * from jdbcstudy.users where name =? and password=?";
PreparedStatement pst = con.prepareStatement(sql);
//1代表第一个?后面以此类推
pst.setString(1,name);
pst.setString(2,password);
ResultSet rst = pst.executeQuery();
if (rst.next()){
System.out.println(rst.getObject("NAME"));
}else {
System.out.println("检验失败,请重新核对你的信息!!!");
}

JDBC_Util.CloseConnection(con,pst,rst);
}

6.DCBP连接池

  1. DBCP是Apche提供的一个数据库连接池
  2. 我们在连接数据库时直接设置好配置文件
  3. 通过对应的三个jar包中提供的类和方法直接调用即可
  4. commons-dbcpcommons-logging 、commons-pool
  5. 导入方式和开头提及的JDBC导入方式相似

6.1DCBP工具类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 在Util的基础上做出相应改变
private static DataSource dse = null;
static {
//1.通过类的加载器获取配置文件
InputStream in = 本类类名.class.getClassLoader().getResourceAsStream("配置文件名.properties");
//2.读取配置文件
Properties pis = new Properties();
pis.load(in);
//2.1加载登录参数
dse = BasicDataSourceFactory.createDataSource(pis);
}

//3.创建连接
public static Connection getConnection() throws Exception{
return dse.getConnection()
}
//4.关闭流
public static void CloseConnection(Connection con, Statement sta, ResultSet rst){
//最好判断一下每个资源是否为null
con.close();
sta.close();
rst.close();
}

6.2properties文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf8&useSSL=true
username=root
password=123456

#<!-- 初始化连接 -->
initialSize=10

#最大连接数量
maxActive=50

#<!-- 最大空闲连接 -->
maxIdle=20

#<!-- 最小空闲连接 -->
minIdle=5

#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
maxWait=60000
#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:【属性名=property;】
#注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。
connectionProperties=useUnicode=true;characterEncoding=UTF8

#指定由连接池所创建的连接的自动提交(auto-commit)状态。
defaultAutoCommit=true

#driver default 指定由连接池所创建的连接的只读(read-only)状态。
#如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)
defaultReadOnly=

#driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
defaultTransactionIsolation=READ_UNCOMMITTED

JDBC安装使用
http://example.com/2022/06/30/MySQL/JDBC配置/
Author
John Doe
Posted on
June 30, 2022
Licensed under