JDBC连接MySQL并实现模糊查询
作者:九九舅舅酒酒 发布时间:2021-07-06 01:42:28
标签:JDBC,连接,MySQL,模糊,查询
场景:
在学习JDBC的语言中,每次都执行通用的几步:即注册驱动,获取连接,创建操作,处理结果,释放资源 过于复杂,因此不妨将上述步骤封装成工具类,只对外提供方法!
描述:
这是不使用工具类的封装写出来的代码,比较冗余复杂
package com.zdx.JDBC;
import java.sql.*;
public class JAVA1129_5 {
public static void main(String[] args) {
//设置空对象,注册驱动,获取连接,创建操作,处理结果集,释放资源
String url = "jdbc:mysql://127.0.0.1:3306/hello";
String username = "root";
String password = "rota";
String SQL = "insert into stu values(1,'zdx','nbnc'),(2,'cyc','qwq');";
// String SQL1 = "update stu set sname ='xzq',major='bask' where sno = '1';";
String SQL1="select * from stu";
Connection connection = null;
Statement statement = null;
ResultSet resultset = null;
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection(url, username, password);
statement = connection.createStatement();
int cnt = statement.executeUpdate(SQL);
if (cnt != 0) {
System.out.println("执行成功");
}
ResultSet result = statement.executeQuery(SQL1);
while (result.next()) {
//随着光标移动对操作对象进行操作
System.out.println("nbnb");
}
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//释放资源,必须在最后加上finally语句块执行
finally {
if (resultset != null) {
try {
resultset.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (statement != null) {
try {
statement.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
}
解决方案:
首先类内的构造方法加私有修饰符,模仿Sun公司工具类,如Arrays类 和 Collection 。
其次注册驱动,利用静态代码块内只注册一次进行注册驱动
然后获取数据库连接,返回数据库连接对象的方法内有异常,不能catch,需要向外扔。
最后封装一个关闭的方法。
注意由于封装工具类,且对外只提供方法因此都封装成类方法(即static修饰)
package com.zdx.JDBC;
import java.sql.*;
//2021.11.2920点03分 对数据库的工具类进行封装
public class DBUtil{
private DBUtil(){}
static{
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}//利用静态代码块在类加载时只加载一次的特性注册驱动。
//获取连接的方法
public static Connection getConnection (String url,String user,String password)throws SQLException{
return DriverManager.getConnection(url,user,password);//这里注意驱动管理类内调用的获取连接方法返回对象就是connection对象。
}
//关闭资源
//按照顺序,结果集,数据库操作对象,连接对象!
public static void close(Connection connection,Statement ps,ResultSet resultSet){
if(resultSet!=null){
try {
resultSet.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(ps!=null){
try {
ps.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(connection!=null){
try {
connection.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
对工具类进行调用实现模糊查询:
package com.zdx.JDBC;
import java.sql.*;
public class Main {
public static void main(String[] args) {
Connection connection = null;
PreparedStatement ps = null;
ResultSet resultSet = null;
String url = "jdbc:mysql://127.0.0.1:3306/hello";
String user = "root";
String password = "rota";
//获取连接
try {
connection = DBUtil.getConnection(url, user, password);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
//获取预编译的数据库操作对象
String SQL = "select sname from stu where sname like ?";
try {
ps = connection.prepareStatement(SQL);
ps.setString(1, "_y%");
resultSet = ps.executeQuery();
while (resultSet.next()) {
System.out.println(resultSet.getString("sname"));
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
//释放资源
finally {
DBUtil.close(connection, ps, resultSet);
}
}
}
来源:https://blog.csdn.net/m0_56164356/article/details/121618599


猜你喜欢
- 前言本文主要讲述如何使用Java + FFmpeg实现对视频文件的信息提取、码率压缩、分辨率转换等功能;之前在网上浏览了一大圈Java使用F
- 本文实例讲述了c#窗体传值用法。分享给大家供大家参考。具体分析如下:对于窗体间的数据传递,是刚开始从事.Net窗体应用程序开发人员碰到的一个
- 1. 定义在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。2. 使用的
- 概述1、ThreadPoolExecutor作为java.util.concurrent包对外提供基础实现,以内部线程池的形式对外提供管理任
- 概念里氏替换原则是任何基类出现的地方,子类一定可以替换它;是建立在基于抽象、多态、继承的基础复用的基石,该原则能够保证系统具有良好的拓展性,
- 一、概述今天给大家带来SurfaceView的一个实战案例,话说自定义View也是各种写,一直没有写过SurfaceView,这个玩意是什么
- 一、简介日志打印是java代码开发中不可缺少的重要一步。日志可以排查问题,可以搜集数据二、常用日志框架比较常用的日志框架就是logback,
- 目录简介匿名方法的参数使用范围委托示例简介在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法。而 C# 2.0 -- 引
- 1. HTTP 响应码 301 和 302 代表的是什么?有什么区别?301:永久重定向。 302:暂时重定向。它们的区别是,301 对搜索
- object nullObj = null; object obj = new Object(); return nullObj ?? ob
- 本文实例为大家分享了Unity shader实现消融效果的具体代码,供大家参考,具体内容如下效果图:shader代码:// Upgrade
- @GetMapping注解携带参数方式今天突然发现,当我们根据id查询用户信息时,如果不想通过localhost:8080//findOne
- Java获取文件的类型和扩展名实现代码:File file=new File("E:\\aa.jpg"); String
- 在许多APP中,有的搜索框是一直固定的,有的呢,附加了很多的效果,就比如京东好吧,谁让京东那么厉害呢,不说了,开始 * !原理:就是自定义sc
- Mybatis mapper模糊查询语句LIKE最近做学校安排的课程设计作业,用到SSM框架,在自己写mapper代码是遇到了模糊查询的问题
- 效果展示在实际项目当中我们经常看到如下各种剪裁形状的效果,Flutter 为我们提供了非常方便的 Widget 很轻松就可以实现,下面我们来
- 准备工具:IDEAjdk1.8Navicat for MySQLPostman一、新建Project选择依赖:mybatis Web Mys
- 项目里面用到了语音唤醒功能,前面一直在用讯飞的语音识别,本来打算也是直接用讯飞的语音唤醒,但是讯飞的语音唤醒要收费,试用版只有35天有效期。
- java通过IP解析地理位置在项目开发中,需要在登录日志或者操作日志中记录客户端ip所在的地理位置。目前根据ip定位地理位置的第三方api有
- 在同一个类中: 对于静态方法,其他的静态或非静态方法都可以直接调用它。而对于非静态方法,其他的非静态方法是可以直接调用它的。但是其他静态方法