最全如何使用Java操作数据库?一文帮你搞懂Java的JDBC编程,今日头条面试经历

最后

光给面试题不给答案不是我的风格。这里面的面试题也只是凤毛麟角,还有答案的话会极大的增加文章的篇幅,减少文章的可读性

Java面试宝典2021版

最常见Java面试题解析(2021最新版)

2021企业Java面试题精选

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

} catch(SQLException e){

e.printStackTrace();

}

}

JDBC步骤总结:

1. 创建数据库连接Connection

2. 创建操作命令Statement

3. 使用操作命令来执行SQL

4. 处理结果集ResultSet

5. 释放资源**(顺序与创建时相反)**

4. 数据库连接Connection

===================

Connection接口实现类由数据库提供,获取Connection的方式有两种:

1. DriverManager驱动管理类的静态方法获取

Class.forName(“com.mysql.jdbc.Driver”);

Connection connection = DriverManager.getConnection(url);

2. 通过DataSource(数据源)对象获取。实际应用中会使用DataSource对象

DataSource ds = new MysqlDataSource();

((MysqlDataSource) ds).setURL(“jdbc:mysql://localhost:3306/blog”);

((MysqlDataSource) ds).setUser(“root”);

((MysqlDataSource) ds).setPassword(“root”);

Connection connection = ds.getConnection();

区别:

1.  DriverManager类来获取的Connection连接,是无法重复利用的,每次使用完以后释放资源

时,通过connection.close()都是关闭物理连接

2. DataSource提供连接池的支持。连接池在初始化时将创建一定数量的数据库连接,这些连接

可以复用的,每次使用完数据库连接,释放资源调用connection.close()都是将

Conncetion连接对象回收。

5. Statement对象

===============

Statement对象主要是将SQL语句发送到数据库中。JDBC API中主要提供了三种Statement对象。

Statement:

· 用于执行不带参数的简单SQL语句

PreparedStatement:

· 用于执行简单不带参数的简单SQL语句

· SQL语句会预编译在数据库系统

· 执行速度快于Statament对象

CallableStatement:

· 用于执行数据库存储过程的调用

实际开发中最常用的是PreparedStatement对象,以下是对其的总结:

1. 参数化SQL查询

2. 性能比Statement高

3. SQL预编译

4. 阻止常见SQL攻击

5. 占位符:?下标从1开始

6. 占位符不能使用多值

主要掌握两种执行SQL的方法:

1. executeQuery() 方法执行后返回单个结果集,通常用于select语句

2. executeUpdate() 方法返回值是一个整数,值受影响的行数,通常用于update,insert,delete语句

6. SQL注入及占位符的举例说明

==================

看这样的例子:一张学生表中有id和姓名,我们通过预编译的方法查询某个学生

代码示例:

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

public class Blog {

public static void main(String[] args) throws SQLException {

Connection conn = null; //数据库连接

PreparedStatement ps = null; //创建预编译命令

ResultSet r = null; //结果集

try{

DataSource ds = new MysqlDataSource();

((MysqlDataSource) ds).setURL(“jdbc:mysql://localhost:3306/blog”);

((MysqlDataSource) ds).setUser(“root”);

((MysqlDataSource) ds).setPassword(“xiaobai520…@@@”);

((MysqlDataSource) ds).setUseUnicode(true);

((MysqlDataSource) ds).setCharacterEncoding(“UTF-8”);

((MysqlDataSource) ds).setUseSSL(false);

conn = ds.getConnection();

String queryName = “小张’ or ‘1’='1”;

String sql = “select id,name from student where name = '”+queryName+“'”;

ps = conn.prepareStatement(sql);

r = ps.executeQuery();

while(r.next()){

int id = r.getInt(“id”);

String name = r.getString(“name”);

System.out.printf(“id=%s name=%s\n”,id,name);

}

}finally{ //反顺序释放资源

if(r != null){

r.close();

}

if(ps != null){

ps.close();

}

if(conn != null){

conn.close();

}

}

}

}

1. SQL注入的说明 :

我们本想只查看小张的信息,但是因为or后面为真,所以每条信息都会遍历到

输出结果:

这就是SQL注入,在使用简单的操作命令对象,拼接sql字符串时可能会出现安全问题

2. 占位符的说明 :

为了防止SQL注入,我们使用预编译的操作命令可以使用占位符 ?,这样可以防止SQL注入还可以提高效率

我们对上面部分代码进行改造:

String queryName = “小张’ or ‘1’='1”;

int queryId = 3;

String sql = “select id,name from student where name = ? or id = ?”;

ps = conn.prepareStatement(sql);

ps.setString(1,queryName);

ps.setInt(2,queryId);

**注意:**set后面的类型与后面queryName,queryId相对应占位符必须从1开始,否则会报错

输出结果:

因为queryName在表中没有找到,只有输出了id=3的这条记录

7. ResultSet对象

===============
ResultSet对象它被称为结果集,它代表符合SQL语句条件的所有行,并且它通过一套getXXX方法提供
了对这些行中数据的访问。
ResultSet里的数据一行一行排列,每行有多个字段,并且有一个记录指针,指针所指的数据行叫做当
前数据行,我们只能来操作当前的数据行。我们如果想要取得某一条记录,就要使用ResultSet的next()
方法 ,如果我们想要得到ResultSet里的所有记录,就应该使用while循环。

最后

即使是面试跳槽,那也是一个学习的过程。只有全面的复习,才能让我们更好的充实自己,武装自己,为自己的面试之路不再坎坷!今天就给大家分享一个Github上全面的Java面试题大全,就是这份面试大全助我拿下大厂Offer,月薪提至30K!

我也是第一时间分享出来给大家,希望可以帮助大家都能去往自己心仪的大厂!为金三银四做准备!
一共有20个知识点专题,分别是:

Dubbo面试专题

JVM面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Java并发面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Kafka面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

MongDB面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

MyBatis面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

MySQL面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Netty面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

RabbitMQ面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Redis面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Spring Cloud面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

SpringBoot面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

zookeeper面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

常见面试算法题汇总专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

计算机网络基础专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

设计模式专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

zookeeper面试专题

[外链图片转存中…(img-e7DXC0If-1715600192591)]

常见面试算法题汇总专题

[外链图片转存中…(img-CzJgcYgO-1715600192591)]

计算机网络基础专题

[外链图片转存中…(img-bXqdUrld-1715600192592)]

设计模式专题

[外链图片转存中…(img-NZCdzwI4-1715600192592)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值