一、准备环境
开发工具:IDEA
jdk版本: 8+ (jdk13)
数据库:MySQL 5+ (mysql 8)
所需JAR包:数据库驱动jar包(mysql-connector-java-5.1.49.jar)
-
在IDEA中创建一个空项目(或者模块)
- 以创建空项目为例,以此点击:
File ——> New ——> Project ——> 选择左下角的Empty Project ——> 在右上选择SDK ——> 点击NEXT ——> 给项目命名,如:JDBC ——> FINISH
- 以创建空项目为例,以此点击:
-
在项目中创建一个JAVA模块
File ——> New ——> Module ——> 选择左上角的Java ——> 在右上选择SDK ——> 点击NEXT ——> 给模块命名,如:BaseOption ——> FINISH
此时模块的结构为:
BaseOption
|__ BaseOption.iml
|__ src
二、JDBC入门
2.1创建lib目录
在**BaseOption**下创建**lib**文件夹
2.2导入JAR包
- 将JAR包(mysql-connector-java-5.1.49.jar)复制到**lib**目录下
- 右键jar包——>**Add as library**——>**OK**
2.3编写JDBC工具类
-
在src下创建相应的包(如,cn.langkye.utils)
-
在utils下新建类(JDBCUtil)
-
编写获取数据库连接和释放资源的代码
package com.langkye.utils;
import org.junit.Test;
import java.sql.*;
/**
* @Author: langkye
* @Date: 2020/6/22
* @version: 1.0
* @Lisence: Created with IntelliJ IDEA.
* @Description: JDBCUtil
*/
public class JDBCUtil {
// 连接的数据库地址,数据库名,参数
private static String url = "jdbc:mysql://127.0.0.1:3306/db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";
// 数据库用户名
private static String username = "root";
// 当前用户密码
private static String password = "langkye";
// mysql驱动位置
private static String driver = "com.mysql.jdbc.Driver";
// 加载并数据库驱动
static {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取数据库连接
* @return conn 数据库连接对象
*/
public static Connection getConnection(){
Connection conn = null;
try {
conn = DriverManager.getConnection(url,username,password);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return conn;
}
/**
* 释放资源
* @param rs 查询结果集
* @param stmt sql执行对象
* @param conn 数据库连接对象
*/
public static void close(ResultSet rs,Statement stmt,Connection conn){
/* 按照从小到大释放资源 */
// 释放结果集
if (rs!=null) {
try {
rs.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
// 释放sql执行对象
if (stmt!=null) {
try {
stmt.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
// 释放数据库连接对象
if (conn!=null) {
try {
conn.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
// 释放资源
public static void close(Statement stmt,Connection conn){
close(null,stmt,conn);
}
// 释放资源
public static void close(Connection conn){
close(null,conn);
}
// 测试数据库连接
@Test
public void TestJDBC(){
Connection conn = JDBCUtil.getConnection();
if (conn!=null){
System.out.println("数据库连接成功:" + conn);
close(conn);
}
}
}
2.4使用JDBC操作数据库
package com.langkye.dao;
import com.langkye.utils.JDBCUtil;
import org.junit.Test;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UserDao {
/**
* 1. 修改"LinQinXia"用户的年龄为28
*/
@Test
public void test1(){
// 声明
Connection conn = null;
PreparedStatement pstmt = null;
// 1. 获取connection
conn = JDBCUtil.getConnection();
//2. 定义sql
String sql = "update user set age = ? where username = ?";
//3. 执行sql
try {
// 预编译sql,防止SQL注入
pstmt = conn.prepareStatement(sql);
// 设置参数
pstmt.setInt(1,28);
pstmt.setString(2,"LinQinXia");
// 执行sql,返回影响行数
int count = pstmt.executeUpdate();
System.out.println(count);
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
// 释放资源
JDBCUtil.close(pstmt,conn);
}
}
/**
* 2. 添加一条记录
*/
@Test
public void test2(){
// 声明
Connection conn = null;
PreparedStatement pstmt = null;
// 1. 获取connection
conn = JDBCUtil.getConnection();
// 2. 定义sql
String sql = "insert into user(username,password,name,age ,birthday,address) values(?,?,?,?,?,?)";
// 执行sql
try {
// 预编译sql
pstmt = conn.prepareStatement(sql);
// 设置参数
pstmt.setString(1,"Tom");
pstmt.setString(2,"Tom123");
pstmt.setString(3,"Tom");
pstmt.setInt(4,22);
pstmt.setString(5,"2000-02-01");
pstmt.setString(6,"China");
// 执行sql,返回影响行数
int count = pstmt.executeUpdate();
System.out.println(count);
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
// 释放资源
JDBCUtil.close(pstmt,conn);
}
}
/**
* 3.查询
*/
@Test
public void test3(){
// 声明
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
// 1. 获取connection
conn = JDBCUtil.getConnection();
// 2. 定义sql
String sql = "select * from user";
// 执行sql
try {
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
while (rs.next()){
int id = rs.getInt("id");
String username = rs.getString("username");
String password = rs.getString("password");
// ...
System.out.println(id + "," + username + "," + password);
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
// 释放资源
JDBCUtil.close(rs,pstmt,conn);
}
}
}
附录:SQL数据
这里准备了测试所用的sql
/**
* @Author: Langkye
* @Description: Test Data
*/
/* ------------>建库<------------ */
# 查看当前数据库
SELECT DATABASE();
# 创建数据库
CREATE DATABASE IF NOT EXISTS db CHARSET = 'utf8';
# 使用数据库
USE db;
/* ------------>建表<------------ */
-- 创建用户表
DROP TABLE IF EXISTS user;
CREATE TABLE user
(
`id` INT(11) PRIMARY KEY AUTO_INCREMENT COMMENT '自增主键',
`username` VARCHAR(32) UNIQUE NOT NULL COMMENT '用户名',
`password` VARCHAR(100) NOT NULL COMMENT '密码',
`name` VARCHAR(32) NOT NULL COMMENT '姓名',
`gender` ENUM ('男','女') DEFAULT '男' COMMENT '性别',
`age` INT(3) NULL COMMENT '年龄',
`birthday` DATE NOT NULL COMMENT '出生日期',
`address` VARCHAR(100) NULL COMMENT '地址'
)/* AUTO_INCREMENT=1001 */;
-- 查看创建的表
SHOW TABLES;
-- 查看表字段及其属性
SHOW FULL COLUMNS FROM user;
-- 查看表结构
DESCRIBE user;
DESC user;
/* ------------>插入记录<------------ */
-- 插入 [用户] 记录
DELETE FROM user WHERE 1=1;
INSERT INTO user
VALUES
(NULL,'LinQinXia','admin', '李嘉欣','女', NULL, '1970-05-20', '中国'),
(NULL,'ZhongLiTi','admin', '钟丽缇','女', NULL, '1970-05-20', '中国'),
(NULL,'ZhangTing','admin', '张庭','女', NULL, '1970-05-20', '中国'),
(NULL,'ZhuYin','admin', '朱茵','女', NULL, '1971-05-20', '中国'),
(NULL,'YuFeiHong','admin', '俞飞鸿','女', NULL, '1971-05-20', '中国'),
(NULL,'YuanYongYi','admin', '袁咏仪','女', NULL, '1971-05-20', '中国'),
(NULL,'HongXin','admin', '洪欣','女', NULL, '1971-05-20', '中国'),
(NULL,'NingJing','admin', '宁静','女', NULL, '1972-05-20', '中国'),
(NULL,'TaoHng','admin', '陶虹','女', NULL, '1972-05-20', '中国'),
(NULL,'CaiShaoFen','admin', '蔡少芬','女', NULL, '1973-05-20', '中国'),
(NULL,'LiBingBing','admin', '李冰冰','女', NULL, '1973-05-20', '中国'),
(NULL,'ZhouXun','admin', '周迅','女', NULL, '1974-05-20', '中国'),
(NULL,'WangYan','admin', '王艳','女', NULL, '1974-05-20', '中国'),
(NULL,'LinZhiLing','admin', '林志玲','女', NULL, '1973-05-20', '中国'),
(NULL,'JiaJingWeng','admin', '贾静雯','女', NULL, '1973-05-20', '中国'),
(NULL,'ChenDeRong','admin', '陈德容','女', NULL, '1973-05-20', '中国'),
(NULL,'HeMeiXi','admin', '何美钿','女', NULL, '1975-05-20', '中国'),
(NULL,'ZhaoWei','admin', '赵薇','女', NULL, '1976-05-20', '中国'),
(NULL,'LinXinRu','admin', '林心如','女', NULL, '1976-05-20', '中国'),
(NULL,'ShuQi','admin', '舒淇','女', NULL, '1976-05-20', '中国'),
(NULL,'SunLi','admin', '孙莉','女', NULL, '1976-05-20', '中国'),
(NULL,'DaS','admin', '大S','女', NULL, '1976-05-20', '中国'),
(NULL,'ChenShu','admin', '陈数','女', NULL, '1976-05-20', '中国'),
(NULL,'HuangYi','admin', '黄奕','女', NULL, '1976-05-20', '中国'),
(NULL,'JiangZuPing','admin', '江祖平','女', NULL, '1978-05-20', '中国'),
(NULL,'ZhangZiYi','admin', '章子怡','女', NULL, '1979-05-20', '中国'),
(NULL,'GaoYuanYuan','admin', '高圆圆','女', NULL, '1979-05-20', '中国'),
(NULL,'ChenHao','admin', '陈好','女', NULL, '1979-05-20', '中国'),
(NULL,'ChenQiaoEn','admin', '陈乔恩','女', NULL, '1979-05-20', '中国')
;
-- 查看记录是否添加成功
SELECT * FROM user;