今日内容
零、 复习昨日
一、引言
1.1 如何操作数据库
客户端操作数据库步骤 |
---|
 |
1.2 实际开发中,会采用客户端操作数据库吗?
二、JDBC
2.1 什么是 JDBC?
2.2 JDBC 核心思想
核心思想 |
---|
 |
2.2.1 MySQL 数据库驱动
2.3 环境搭建
mysql厂商提供的jdbc规范的实现,要想完成JDBC操作,就需要将驱动包加入到当前项目中.
2.3.1 方式1:复制粘贴
在项目名下创建文件夹lib |
---|
 |
命名为lib |
---|
 |
将mysql驱动包复制粘贴到此处 |
---|
 |
添加驱动包为当前项目的类库 |
---|
 |
2.3.2 方式2:idea导入类库
打开项目结构(Project Structure) |
---|
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ppjLhrMS-1683686915035)(C:/Users/qiush/AppData/Roaming/Typora/typora-user-images/image-20230320105013907.png)] |
选择libraries,添加jar包 |
---|
 |
本地磁盘选择jar包 |
---|
 |
应用生效 |
---|
 |
下方,External查看导入类库 |
---|
 |
三、JDBC编程
3.1 注册驱动
Class.forName("com.mysql.jdbc.Driver");
Class.forName("com.mysql.cj.jdbc.Driver");
3.2 连接数据库
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC ", "root","1234");
- URL(Uniform Resource Locator) 统一资源定位符:由协议、IP、端口、SID(程序实例名称)组成
3.3 获取发送 SQL 的对象
Statement statement = conn.createStatement();
3.4 执行SQL 语句
String sql ="INSERT INTO t_jobs(JOB_ID,JOB_TITLE,MIN_SALARY,MAX_SALARY) VALUES('JAVA_Le','JAVA_Lecturer',4000,10000);";
int result = statement.executeUpdate(sql);
- 注意:在编写 DML 语句时,一定要注意字符串参数的符号是单引号 ‘值’
- DML 语句:增删改时,返回受影响行数(int 类型)。
- DQL 语句:查询时,返回结果数据(ResultSet 结果集)。
3.5 处理结果
if(result == 1){
System.out.println("Success");
}
- 受影响行数:逻辑判断、方法返回。
- 查询结果集:迭代、依次获取。
3.6 释放资源
statement.close();
conn.close();
3.7 案例
准备数据库表,进行CRUD.
create table tb_user(
id int(11) primary key auto_increment comment '用户编号',
username varchar(10) comment '用户名',
password varchar(10) comment '密码',
phone varchar(11) comment '手机号',
createTime date comment '注册时间',
money double(10,2) comment '账户余额',
sex int(1) comment '性别 1男2女'
);
需求: 使用JDBC完成对tb_user表插入数据
package com.qf.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class Demo1_insert {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/java2217?useSSL=false&serverTimezone=UTC";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url,username,password);
Statement statement = conn.createStatement();
String sql = "insert into tb_user (id,username,password,phone,createTime,money,sex) values (2,'root','123456','1122200','2022-11-21',2000.0,2)";
int num = statement.executeUpdate(sql);
if (num > 0) {
System.out.println("插入成功!!" );
}
statement.close();
conn.close();
}
}
四、完成增删改
4.1 插入
参考入门案例
4.2 更新
任何的JDBC都是那5个步骤.
package com.qf.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class Demo2_update {
public static void main(String[] args) throws Exception {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/java2217?useSSL=false";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, username, password);
Statement statement = conn.createStatement( );
String sql = "update tb_user set username = '小孟', phone = '666666' where id = 3";
int num = statement.executeUpdate(sql);
if (num > 0) {
System.out.println("更新成功!" );
}
statement.close();
conn.close();
}
}
4.3 删除
public class Demo3_delete {
public static void main(String[] args) throws Exception {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/java2217?useSSL=false", "root", "123456");
Statement statement = conn.createStatement( );
int num = statement.executeUpdate("delete from tb_user where id = 3");
if (num > 0) {
System.out.println("删除成功!");
}
statement.close();
conn.close();
}
}
五、查询结果集ResultSet【重要】
package com.qf.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Demo4_select {
public static void main(String[] args) throws Exception {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/java2217?useSSL=false", "root", "123456");
Statement statement = conn.createStatement( );
String sql = "select id,username,password from tb_user";
ResultSet rs = statement.executeQuery(sql);
while (rs.next()) {
int id = rs.getInt("id");
String username = rs.getString("username");
System.out.println(id + "-" + username);
}
statement.close();
conn.close();
}
}

六、登录案例【重要】
package com.qf.jdbc;
import com.mysql.jdbc.Driver;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;
public class Demo5_Login {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入用户名:" );
String username = scanner.nextLine( );
System.out.println("请输入密码:" );
String password = scanner.nextLine( );
boolean isOk = findUserByLogin(username,password);
if (isOk) {
System.out.println("登录成功!" );
} else {
System.out.println("用户名或密码错误!" );
}
}
private static boolean findUserByLogin(String username, String password) {
Connection conn = null;
Statement statement = null;
boolean isOk = false;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/database?useSSL=false", "root", "123456");
statement = conn.createStatement( );
ResultSet rs = statement.executeQuery("select * from tb_user where username = '"+username+"' and password = '"+password+"'");
if (rs.next()) {
int id = rs.getInt("id");
String uname= rs.getString("username");
System.out.println(id+"-"+username);
isOk = true;
} else {
}
}catch (Exception e) {
System.out.println("SQL操作出错!" );
e.printStackTrace();
} finally {
try{
statement.close();
conn.close();
}catch (Exception e) {
System.out.println("关流异常" );
e.printStackTrace();
}
}
return isOk;
}
}
七、ORM【重要】
7.1 什么是ORM
7.2 实体类
package com.qf.model;
public class User {
private int id;
private String username;
private String password;
private String phone;
private Date createTime;
private double money;
private int sex;
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PoGLG5sN-1683686914087)(…/…/…/…/Java2217/阶段2/day43/笔记/day43_jdbc.assets/image-20221122160619448.png)]
7.3 ORM改造登录案例
package com.qf.jdbc;
import com.qf.model.User;
import java.sql.*;
import java.util.Scanner;
public class Demo6_login_orm {
public static void main(String[] args) {
input();
}
public static void input() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入用户名:");
String username = scanner.nextLine( );
System.out.println("请输入密码:");
String password = scanner.nextLine( );
User user = findUserByUsernameAndPassword(username, password);
if (user != null) {
System.out.println("用户登录成功" );
System.out.println("用户信息: " + user );
} else {
System.out.println("用户名或密码错误!" );
}
}
public static User findUserByUsernameAndPassword(String username, String password) {
Connection conn = null;
Statement s = null;
ResultSet rs = null;
User user = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/java2301?useSSL=false", "root", "123456");
s = conn.createStatement( );
String sql = "select * from tb_user where username = '"+username+"' and password = '"+password+"'";
rs = s.executeQuery(sql);
if (rs.next()) {
int id = rs.getInt("id");
String username1 = rs.getString("username");
String password1 = rs.getString("password");
String phone = rs.getString("phone");
Date createTime = rs.getDate("createTime");
double money = rs.getDouble("money");
int sex = rs.getInt("sex");
user = new User();
user.setId(id);
user.setUsername(username1);
user.setPassword(password1);
user.setPhone(phone);
user.setCreateTime(createTime);
user.setMoney(money);
user.setSex(sex);
}
} catch (Exception e) {
System.out.println("出错了!" + e.getMessage( ));
} finally {
try {
rs.close();
s.close( );
conn.close( );
} catch (SQLException e) {
System.out.println("关流时有异常" + e.getMessage( ));
}
}
return user;
}
}
7.4 ORM完成注册
package com.qf.jdbc;
import com.qf.model.User;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo7_insert_orm {
public static void main(String[] args) {
User user = new User( );
user.setUsername("王五");
user.setPassword("123456");
user.setPhone("110");
user.setCreateTime(new Date( ));
user.setMoney(2800.0);
user.setSex(2);
insert(user);
}
public static void insert(User user) {
Connection conn = null;
Statement s = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/java2301?useSSL=false", "root", "123456");
s = conn.createStatement( );
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String date = sdf.format(user.getCreateTime( ));
String sql = "insert into tb_user (username,password,phone,createTime,money,sex) " +
"values ('"+user.getUsername()+"','"+user.getPassword()+"','"+user.getPhone()+"','"+date+"',"+user.getMoney()+","+user.getSex()+")";
System.out.println("拼接后的sql ---> " + sql );
int num = s.executeUpdate(sql);
System.out.println(num > 0 ? "插入成功":"插入失败" );
} catch (Exception e) {
e.printStackTrace( );
}
}
}