Java连接数据库-jbdc
目录
- Java连接数据库-jbdc
-
- 什么是jbdc
-
- 基本概念
- 操作步骤
- jdbc 下载地址
-
- jdbc 使用步骤
- 操作示例
- 实战编码
- jdbc 操做详解
-
- 相关对象
- 注册驱动
- 获取连接对象
- 常用的连接对象的方法
- 执行对象的相关方法
- 演练
-
- 增
- 删
- 改
- 使用查询结果集对象
-
- 读取一行数据
- 读取所有行的数据
- 演练 查
- 事务操作
- jbdc 工具类
-
- 分布代码
- 演练
- 工具类编写
-
- 阶段一
-
- 方式一
- 方式二
-
- 利用properties集合存数据
- 利用properties集合读数据
- 静态方法块
- 阶段二
- 安全执行者
-
- 安全问题 sql 注入
- prepareStatement
-
- 模型
- 数据为连接池
-
- 模型
- 概念
- DataSource 连接
-
- 具体操作
- 实际演练
- Druid 数据库连接池技术
-
- 实际操作
- JDBC Template
-
- JDBC Template入门
-
- 增删改
- 查操作
-
- 单个数据
- 多个数据
- 关于Java bean
-
- JDBC 使用 Java Bean
- 查询,总录数
- 小结
-
- 定义映射对象
- 利用系统提供的自动映射对象
什么是jbdc
基本概念
关系图
操作步骤
jdbc 下载地址
jdbc驱动下载
bsq2
jdbc 使用步骤
新建一个项目lib目录
设置lib 目录为库目录
让开放环境知道去哪里找相关文件 选中lib 右键目录,选择 Add as Libary
注册驱动
获取连接对象
定义sql 语句和获取执行者
操作示例
实战编码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class Test {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/hpschool";
Connection connection = DriverManager.getConnection(url, "root", "root");
Statement statement = connection.createStatement();
String sql = "INSERT INTO teacher VALUES(NULL,\"赵云\",\"龙胆\",\"2011-1-3\")";
int i = statement.executeUpdate(sql);
System.out.println(i);
}
}
jdbc 操做详解
相关对象
注册驱动
获得连接对象
连接对象的常用方法
执行者对象的相关方法
演练
增
删
改
查询结果集对象的使用
读取一行数据
读取所有行的数据
演练 查
import java.sql.*;
public class Test02 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
// 注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 获得连接对象
String connStr = "jdbc:mysql://localhost:3306/db11070326";
String user = "root";
String pass = "root123";
Connection conn = DriverManager.getConnection(connStr, user, pass);
// 获取执行者
Statement stmt = conn.createStatement();
// 新建sql 语句
String sql = "SELECT * FROM teacher;";
ResultSet rs = stmt.executeQuery(sql);
// 让指针往下走
while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
String phone = rs.getString("phone");
String skill = rs.getString("skill");
String res = String.format("编号:%s,姓名:%s,电话:%s,专业:%s",id,name,phone,skill);
System.out.println(res);
}
// 关闭资源
rs.close();
stmt.close();
conn.close();
}
}
事务操作
jbdc 工具类
分布代码
演练
工具类编写
阶段一
方式一
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class JDBCUtils {
public static Connection getConnection() {
// 定义返回值
Connection conn = null;
try {
// 注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 准备数据,连接字符串,用户名,密码
String connStr = "jdbc:mysql://localhost:3306/db11070326";
String user = "root";
String pass = "root123";
// 获取连接对象
conn = DriverManager.getConnection(connStr, user, pass);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
// 返回连接对象
return conn;
}
}
方式二
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class JDBCUtils {
public static Connection getConnection() throws IOException {
// 获取双列集合
Properties properties = new Properties();
// 获得字符数据流对象
FileReader fileReader = new FileReader("setting.properties");
properties.load(fileReader);
String connStr = properties.getProperty("url");
String user = properties.getProperty("user");
String pass = properties.getProperty("pass");
// 关闭字符输入流对象
fileReader.close();
// 定义返回值
Connection conn = null;
try {
// 注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 准备数据,连接字符串,用户名,密码
// 获取连接对象
conn = DriverManager.getConnection(connStr, user, pass);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
// 返回连接对象
return conn;
}
}
利用properties集合存数据
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;
public class pro集合 {
public static void main(String[] args) throws IOException {
Properties properties = new Properties();
// 存值
properties.setProperty("user","root");
properties.setProperty("pass","root123");
properties.setProperty("url","jdbc:mysql://localhost:3306/db11070326");
// 定义个字符流
FileWriter fileWriter = new FileWriter("setting.properties");
//
properties.store(fileWriter,null);
properties. close();
}
}
利用properties集合读数据
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;
public class pro读数据 {
public static void main(String[] args) throws IOException {
// 实例化一个双列集合
Properties properties = new Properties();
// 字符输入流
FileReader fileReader = new FileReader("setting.properties");
// 加载数据
properties.load(fileReader);
String user = properties.getProperty("user");
String pass = properties.getProperty("pass");
String url = properties.getProperty("url");
System.out.println(user+pass+url);
fileReader.close();
}
}
静态方法块
阶段二
快捷键:Ctrl + Ait +T
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class JDBCUtils {
// 获取双列集合
private static Properties properties = new Properties();
static {
try {
// 获得字符数据流对象
FileReader fileReader = new FileReader("setting.properties");
properties.load(fileReader);
// 关闭字符输入流对象
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static Connection getConnection() {
// 定义返回值
Connection conn = null;
try {
// 注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 准备数据,连接字符串,用户名,密码
String connStr = properties.getProperty("url");
String user = properties.getProperty("user");
String pass = properties.getProperty("pass");
// 获取连接对象
conn = DriverManager.getConnection(connStr, user, pass);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
// 返回连接对象
return conn;
}
}
配置文件
#Thu Apr 07 16:14:58 CST 2022
pass=root123
user=root
url=jdbc\:mysql\://localhost\:3306/db11070326
安全执行者
安全问题 sql 注入
prepareStatement
模型
会出安全问题的代码
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
public class TestLogin {
public static void main(String[] args) throws SQLException {
// 扫描仪
Scanner scanner = new Scanner(System.in);
boolean isLosing = false;
// 欢迎语句
System.out.println("欢迎你");
System.out.println("请输入用户名:");
String user = scanner.next();
System.out.println("请输入密码:");
String pass = scanner.next();
// 拿数据去查
// 使用JDBC去查
Connection conn = JDBCUtils.getConnection();
// 获取执行者
Statement stmt = conn.createStatement();
String sql = String.format("SELECT * FROM `user` WHERE uname = '%s' AND pwd = '%s';", user, pass);
ResultSet rs = stmt.executeQuery(sql);
// 这里只做判断
if (rs.next()) {
System.out.println("登录成功");
isLosing = true;
} else {
System.out.println("登录失败");
}
// 关闭资源
JDBCUtils.close(conn, stmt, rs);
Connection conn2 = JDBCUtils.getConnection();
Statement stmt2 = conn2.createStatement();
// 登录成功获取是失败
if (isLosing){
// 登录成功要做的事情
sql = "SELECT s.name AS sname,s.gender,t.name AS tname,t.skill FROM student AS s INNER JOIN teacher AS t ON s.tid = t.id;";
ResultSet rs2 = stmt2.executeQuery(sql);
// 遍历
while (rs2.next()){
String sname = rs2.getString("sname");
String gender = rs2.getString("gender");
String tname = rs2.getString("tname");
String skill = rs2.getString("skill");
// 打印数据
String con = String.format("姓名:%s,性别:%s,老师:%s,老师技能:%s",sname,gender,tname,skill);
System.out.println(con);
}
// 关闭资源
JDBCUtils.close(conn2, stmt2, rs2);
}else {
// 登录失败要做的事情
System.out.println("获取失败");
}
}
}
修改后的代码
import java.sql.*; import java.util.Scanner; public class TestLogin { public static void main(String[] args) throws SQLException { // 扫描仪 Scanner scanner = new Scanner(System.in); boolean isLosing = false; // 欢迎语句 System.out.println("欢迎你"); System.out.println("请输入用户名:"); String user = scanner.next(); System.out.println("请输入密码:"); String pass