11-数据库之JDBC1
一. JDBC
JDBC是Java官方提供的一套API, 用与连接各种数据库; JDBC提供了一组用于执行SQL语句的Java方法, 以及连接到数据库和处理查询结果的一些工具和类
1. JDBC核心接口
- Connection : 表示数据库的连接
- Statement: 用来执行SQL(DDL,DML,DQL)语句的语句对象
- PreparedStatement: 用来执行预编译SQL语句的语句对象
- ResultSet: 用来表示查询的结果集
注意: 不同的DBMS都会提供具体的实现类, 并打包为jar, 这个jar包被称为连接该DBMS的驱动(Driver)
2. JDBC使用流程
2.0 前期准备
2.1 pom.xml中添加依赖
方式1: Maven仓库地址:
https://mvnrepository.com
方式2:
在pom.xml中添加MYSQL数据库的依赖, 并刷新maven
<!-- 指定JDK版本-->
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!-- 连接MySQL数据库的依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
</dependencies>
3. JDBC使用示例
3.1 JDBCDemo1
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
/**
* 演示JDBC使用
* 需求: 在tedu库下创建userinfo(id,username,password,nickname,age);
*
*/
public class JDBCDemo1 {
public static void main(String[] args) {
/*
1. 加载驱动
2. 创建数据库的连接对象 : DriverManager
3. 创建执行SQL语句的对象 : Statement
4. 执行SQL语句
5. 获取SQL语句执行的结果
6. 关闭连接
*/
try {
// 1. 加载驱动 , Alt+Enter处理异常: try/catch
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. 创建数据库连接对象
Connection connection = DriverManager.getConnection(
//直接去浏览器复制即可,注意更改库名tedu,
"jdbc:mysql://localhost:3306/tedu?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true",
"root","root"
);
System.out.println("数据库连接成功");
// 3.创建执行SQL语句的对象 : Statement
Statement statement = connection.createStatement();
String sql = "CREATE TABLE userinfo(" +
"id INT PRIMARY KEY AUTO_INCREMENT," +
"username VARCHAR(32)," +
"password VARCHAR(32)," +
"nickname VARCHAR(32)," +
"age INT" +
")";
// 4. 执行SQL语句
/*
执行SQL语句的方法:
DDL : execute(sql) 返回值是boolean--(CREATE,DROP)
DML : executeUpdate(sql)--(INSERT,DELETE,Update)
DQL : executeQuery(sql) -- SELECT
*/
statement.execute(sql);
// 5. 关闭连接
connection.close();
System.out.println("数据表创建成功");
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
}
3.2 JDBCDemo2
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
/**
* 执行DML语句: executeUpdate(sql)方法
* 需求: 在userinfo表中插入一条表记录 (insert)
*/
public class JDBCDemo2 {
public static void main(String[] args) {
try {
// 1. 加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. 创建数据库连接对象
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/tedu?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true",
"root","root");
// 3.创建执行SQL语句的对象 : Statement
// 快捷键: connection.createStatement().var+回车 自从生成
Statement statement = connection.createStatement();
// String sql = "INSERT INTO userinfo(id, username, password, nickname, age) " +
// "VALUES (null,'赵丽颖','123456','花千骨',36);";
// 需求: 让用户自己输入进行注册
// 接收用户输入的信息
Scanner scanner = new Scanner(System.in);
System.out.println("欢迎注册");
System.out.println("请输入用户名:");
String username = scanner.nextLine();
System.out.println("请输入密码");
String password = scanner.nextLine();
System.out.println("请输入昵称");
String nickname = scanner.nextLine();
System.out.println("请输入年龄");
int age = scanner.nextInt();
String sql = "INSERT INTO userinfo(id, username, password, nickname, age) " +
"VALUES (null,'"+username+"','"+password+"','"+nickname+"',"+age+")";
// System.out.println(sql);
// 4.执行sql语句
// executeUpdate(sql) 返回值类型是整型,表示受影响的数据的条数
// 0: 没有数据受影响
// 非0: 返回的数据有 xxx 条受影响
int num = statement.executeUpdate(sql);
// // 5. 处理返回的结果
if (num>0){
System.out.println("注册成功");
}else{
System.out.println("注册失败");
}
// 6. 关闭连接
connection.close();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
}