【狂神说Java】MySQL最新教程通俗易懂--JDBC详解笔记,2024年最新java面试说我基础太差什么意思

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
img

正文

代码实现:

1.提取工具类

package cn.bloghut.lesson02.utils;

import java.io.InputStream;

import java.sql.*;

import java.util.Properties;

/**

  • @author by 闲言

  • @classname JdbcUtils

  • @description TODO

  • @date 2021/9/1 23:03

*/

public class JdbcUtils {

private static String driver;

private static String url;

private static String username;

private static String password;

static {

try {

InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream(“db.properties”);

Properties properties = new Properties();

properties.load(in);

driver = properties.getProperty(“driver”);

url = properties.getProperty(“url”);

username = properties.getProperty(“username”);

password = properties.getProperty(“password”);

//驱动只加载一次

Class.forName(driver);

} catch (Exception e) {

e.printStackTrace();

}

}

//获取连接

public static Connection getConnection() throws SQLException {

return DriverManager.getConnection(url, username, password);

}

//释放连接资源

public static void release(Connection connection, Statement statement, ResultSet resultSet) {

if (connection != null) {

try {

connection.close();

} catch (SQLException throwables) {

throwables.printStackTrace();

}

}

if (statement != null) {

try {

statement.close();

} catch (SQLException throwables) {

throwables.printStackTrace();

}

}

if (resultSet != null) {

try {

resultSet.close();

} catch (SQLException throwables) {

throwables.printStackTrace();

}

}

}

}

2.增

package cn.bloghut.lesson02;

import cn.bloghut.lesson02.utils.JdbcUtils;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

/**

  • @author by 闲言

  • @classname TestInstance

  • @description TODO

  • @date 2021/9/1 23:16

*/

public class TestInsert {

public static void main(String[] args) {

Connection connection = null;

Statement statement = null;

ResultSet resultSet = null;

try {

//1.获取数据库连接

connection = JdbcUtils.getConnection();

//2.创建SQL的执行对象

statement = connection.createStatement();

//3.执行SQL

String sql = "insert into users(id,name,password,email,birthday) values(4,‘闲言’,‘123’,‘123@qq.com’,null) ";

int num = statement.executeUpdate(sql);

if (num > 0) {

System.out.println(“插入成功”);

}

} catch (SQLException throwables) {

throwables.printStackTrace();

} finally {

JdbcUtils.release(connection, statement, resultSet);

}

}

}

3.删

package cn.bloghut.lesson02;

import cn.bloghut.lesson02.utils.JdbcUtils;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

/**

  • @author by 闲言

  • @classname TestInstance

  • @description TODO

  • @date 2021/9/1 23:16

*/

public class TestDelete {

public static void main(String[] args) {

Connection connection = null;

Statement statement = null;

ResultSet resultSet = null;

try {

//1.获取数据库连接

connection = JdbcUtils.getConnection();

//2.创建SQL的执行对象

statement = connection.createStatement();

//3.执行SQL

String sql = “delete from users where id = 4”;

int num = statement.executeUpdate(sql);

if (num > 0) {

System.out.println(“删除成功”);

}

} catch (SQLException throwables) {

throwables.printStackTrace();

} finally {

JdbcUtils.release(connection, statement, resultSet);

}

}

}

4.改

package cn.bloghut.lesson02;

import cn.bloghut.lesson02.utils.JdbcUtils;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

/**

  • @author by 闲言

  • @classname TestInstance

  • @description TODO

  • @date 2021/9/1 23:16

*/

public class TestUpdate {

public static void main(String[] args) {

Connection connection = null;

Statement statement = null;

ResultSet resultSet = null;

try {

//1.获取数据库连接

connection = JdbcUtils.getConnection();

//2.创建SQL的执行对象

statement = connection.createStatement();

//3.执行SQL

String sql = “update users set name=‘update闲言’ where id = 2”;

int num = statement.executeUpdate(sql);

if (num > 0) {

System.out.println(“修改成功”);

}

} catch (SQLException throwables) {

throwables.printStackTrace();

} finally {

JdbcUtils.release(connection, statement, resultSet);

}

}

}

5.查

package cn.bloghut.lesson02;

import cn.bloghut.lesson02.utils.JdbcUtils;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

/**

  • @author by 闲言

  • @classname TestInstance

  • @description TODO

  • @date 2021/9/1 23:16

*/

public class TestQuery {

public static void main(String[] args) {

Connection connection = null;

Statement statement = null;

ResultSet resultSet = null;

try {

//1.获取数据库连接

connection = JdbcUtils.getConnection();

//2.创建SQL的执行对象

statement = connection.createStatement();

//3.执行SQL

String sql = “select * from users”;

//4.遍历结果集

resultSet = statement.executeQuery(sql);

while (resultSet.next()) {

System.out.println(resultSet.getString(2));

}

} catch (SQLException throwables) {

throwables.printStackTrace();

} finally {

JdbcUtils.release(connection, statement, resultSet);

}

}

}

5.PreparedStatement 对象


SQL注入问题

sql 存在漏洞,会被攻击,导致数据泄漏。SQL会被拼接

preparedStatement 可以防止SQL 注入,效率更好!

5.1、新增

package cn.bloghut.lesson03;

import cn.bloghut.lesson02.utils.JdbcUtils;

import java.sql.Connection;

import java.sql.Date;

import java.sql.PreparedStatement;

/**

  • @author by 闲言

  • @classname TestInsert

  • @description TODO

  • @date 2021/9/2 9:18

*/

public class TestInsert {

public static void main(String[] args) {

Connection connection = null;

PreparedStatement pst = null;

try {

connection = JdbcUtils.getConnection();

//区别

//使用 ? 占位符代替参数

String sql = “insert into users(id,name,password,email,birthday) values(?,?,?,?,?)”;

pst = connection.prepareStatement(sql); //预编译sql,先写sql 然后不执行

//手动给参数赋值

pst.setInt(1, 4);

pst.setString(2, “闲言”);

pst.setString(3, “123”);

pst.setString(4, “123@qq.com”);

// 注意点: sql.Date 数据库

// util.Date java new java.util.Date().getTime() 获得时间戳

pst.setDate(5, new Date(new java.util.Date().getTime()));

//执行sql

int num = pst.executeUpdate();

if (num > 0) {

System.out.println(“插入成功!”);

}

} catch (Exception e) {

e.printStackTrace();

} finally {

JdbcUtils.release(connection, pst, null);

}

}

}

5.2、删除

package cn.bloghut.lesson03;

import cn.bloghut.lesson02.utils.JdbcUtils;

import java.sql.Connection;

import java.sql.Date;

import java.sql.PreparedStatement;

/**

  • @author by 闲言

  • @classname TestInsert

  • @description TODO

  • @date 2021/9/2 9:18

*/

public class TestDelete {

public static void main(String[] args) {

Connection connection = null;

PreparedStatement pst = null;

try {

connection = JdbcUtils.getConnection();

//区别

//使用 ? 占位符代替参数

String sql = “delete from users where id = ?”;

pst = connection.prepareStatement(sql); //预编译sql,先写sql 然后不执行

//手动给参数赋值

pst.setInt(1, 4);

//执行sql

int num = pst.executeUpdate();

if (num > 0) {

System.out.println(“删除成功!”);

}

} catch (Exception e) {

e.printStackTrace();

} finally {

JdbcUtils.release(connection, pst, null);

}

}

}

5.3、修改

package cn.bloghut.lesson03;

import cn.bloghut.lesson02.utils.JdbcUtils;

import java.sql.Connection;

import java.sql.Date;

import java.sql.PreparedStatement;

/**

  • @author by 闲言

  • @classname TestInsert

  • @description TODO

  • @date 2021/9/2 9:18

*/

public class TestUpdate {

public static void main(String[] args) {

Connection connection = null;

PreparedStatement pst = null;

try {

connection = JdbcUtils.getConnection();

//区别

//使用 ? 占位符代替参数

String sql = “update users set name=? where id = ?”;

pst = connection.prepareStatement(sql); //预编译sql,先写sql 然后不执行

//手动给参数赋值

pst.setString(1, “闲言碎语”);

pst.setInt(2, 1);

//执行sql

int num = pst.executeUpdate();

if (num > 0) {

System.out.println(“修改成功!”);

}

} catch (Exception e) {

e.printStackTrace();

} finally {

JdbcUtils.release(connection, pst, null);

}

}

}

5.4、查询

package cn.bloghut.lesson03;

import cn.bloghut.lesson02.utils.JdbcUtils;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

/**

  • @author by 闲言

  • @classname TestExecuteQuery

  • @description TODO

  • @date 2021/9/2 9:59

*/

public class TestExecuteQuery {

public static void main(String[] args) {

Connection conn = null;

PreparedStatement pst = null;

ResultSet rs = null;

try {

//获取连接

conn = JdbcUtils.getConnection();

//编写sql

String sql = “select * from users where id = ?”;

//预编译

pst = conn.prepareStatement(sql);

pst.setInt(1, 1);

rs = pst.executeQuery();

while (rs.next()) {

System.out.println(rs.getString(“name”));

System.out.println(rs.getString(“password”));

}

} catch (SQLException throwables) {

throwables.printStackTrace();

} finally {

JdbcUtils.release(conn, pst, rs);

}

}

}

5.5、防止SQL注入

package cn.bloghut.lesson03;

import cn.bloghut.lesson02.utils.JdbcUtils;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.Statement;

/**

  • @author by 闲言

  • @classname SQLIn

  • @description TODO

  • @date 2021/9/1 23:39

*/

public class SqlIn {

public static void main(String[] args) {

login(“闲言碎语”, “123”);

// login(“‘or’ 1=1”,“12133 'or’1=1”);

}

//登录业务

public static void login(String username, String password) {

Connection connection = null;

PreparedStatement pst = null;

ResultSet resultSet = null;

try {

connection = JdbcUtils.getConnection();

//preparedStatement 防止sql注入的本质,把传递进来的参数当做字符

//假设其中出现转义字符,就直接忽略了

String sql = “select * from users where name = ? and password = ?”;

pst = connection.prepareStatement(sql);

pst.setString(1,username);

pst.setString(2,password);

resultSet = pst.executeQuery();

while (resultSet.next()) {

System.out.println(resultSet.getString(“name”));

System.out.println(resultSet.getString(“password”));

System.out.println(“===================”);

}

} catch (Exception e) {

e.printStackTrace();

} finally {

JdbcUtils.release(connection, pst, resultSet);

}

}

}

6、使用IDEA 连接数据库


在这里插入图片描述

在这里插入图片描述

连接

在这里插入图片描述

连接成功后可以选择数据库

在这里插入图片描述

勾选需要连接的数据库

在这里插入图片描述

双击表名即可查看表信息

在这里插入图片描述


7、事务


要么都成功,要么失败!

ACID原则

  1. 原子性:要么全部完成,要么都不完成

  2. 一致性:总数不变

  3. 持久性:一旦提交不可逆了,持久化到数据库了

  4. 隔离性:多个线程互不干扰

隔离性问题:

  1. 脏读:一个事务读取另一个没有提交的事务

  2. 不可重复读:在同一个事务内,重复读取表中的数据,表数据发生了变化

  3. 虚读(幻读):在一个事务内,读取到别人插入的数据,导致前后读出来的结果不一致

最后

由于细节内容实在太多了,为了不影响文章的观赏性,只截出了一部分知识点大致的介绍一下,每个小节点里面都有更细化的内容!

小编准备了一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

,size_19,color_FFFFFF,t_70,g_se,x_16#pic_center)

双击表名即可查看表信息

在这里插入图片描述


7、事务


要么都成功,要么失败!

ACID原则

  1. 原子性:要么全部完成,要么都不完成

  2. 一致性:总数不变

  3. 持久性:一旦提交不可逆了,持久化到数据库了

  4. 隔离性:多个线程互不干扰

隔离性问题:

  1. 脏读:一个事务读取另一个没有提交的事务

  2. 不可重复读:在同一个事务内,重复读取表中的数据,表数据发生了变化

  3. 虚读(幻读):在一个事务内,读取到别人插入的数据,导致前后读出来的结果不一致

最后

由于细节内容实在太多了,为了不影响文章的观赏性,只截出了一部分知识点大致的介绍一下,每个小节点里面都有更细化的内容!

[外链图片转存中…(img-fjoBy45J-1713668372372)]

小编准备了一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》

[外链图片转存中…(img-L7I0YXBe-1713668372372)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-68PoAHAz-1713668372373)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值