JDBCUtils
-
目的:简化书写
-
分析:
-
注册驱动也抽取
-
抽取一个方法获取连接对象
-
不想传递参数,还要保证工具类的通用性。
-
解决:配置文件
jdbc.properties
url =
user=
password=
-
-
抽取一个方法去释放资源
-
package com.zhiyou.util;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Enumeration;
import java.util.Properties;
public class JDBCUtils {
/*文件只读取一次即可拿到这些值,使用静态代码块*/
private static String url;
private static String user;
private static String password;
private static String driver;
static {
//读取资源文件
//1.Properties
//加载文件
try {
Properties properties = new Properties();
//获取src路径下的文件的方式 ---> ClassLoader 类加载器
ClassLoader classLoader = JDBCUtils.class.getClassLoader();
URL resources = classLoader.getResource("jdbc.properties");
String path = resources.getPath();
properties.load(new FileReader(path));
//获取数据,赋值
url = properties.getProperty("url");
user = properties.getProperty("user");
password = properties.getProperty("password");
driver = properties.getProperty("driver");
Class.forName(driver);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
// 获取连接
// return 连接对象
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url,user,password);
}
/*释放资源*/
public static void close(Statement statement , Connection connection){
if (statement!=null){
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection!=null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(ResultSet resultSet, Statement statement , Connection connection){
if (resultSet!=null){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (statement!=null){
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection!=null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
-
练习:
-
需求:
- 通过键盘录入用户名和密码
- 判断用户登录是否成功
- select * from user where username = “” and password = “”;
-
步骤:
-
创建一个user表
CREATE TABLE user( id int PRIMARY KEY auto_increment, username VARCHAR(32), password varchar(32) ); SELECT * FROM USER; INSERT into user VALUES(Null,'张三','123'); INSERT into user VALUES(Null,'李四','234');
-
login方法
package com.zhiyou.demo; import com.sun.org.apache.bcel.internal.generic.RETURN; import com.zhiyou.util.JDBCUtils; import java.sql.*; import java.util.Scanner; /* * */ public class JDBCDemo09 { public static void main(String[] args) { //1. 键盘录入 接受用户名和密码 Scanner scanner = new Scanner(System.in); System.out.println("输入用户名"); String username = scanner.nextLine(); System.out.println("输入密码"); String password = scanner.nextLine(); //2.调用方法 boolean flag = new JDBCDemo09().login2(username, password); //3.判断结果,输出不同语句 if (flag){ System.out.println("登录成功"); }else { System.out.println("用户名或密码错误"); } } /* 预处理*/ public boolean login2(String username,String password){ if (username==null||password==null){ return false; } //连接数据库判断是否登录成功 Connection connection =null; Statement statement =null; ResultSet resultSet =null; PreparedStatement preparedStatement=null; //1.获取连接 try { connection = JDBCUtils.getConnection(); //2定义sql String sql = "select * from user where username = ? and password = ?"; //3.获取执行sql的对象 preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1,username); preparedStatement.setString(2,password); // resultSet = preparedStatement.executeQuery(); return resultSet.next(); } catch (SQLException e) { e.printStackTrace(); }finally { JDBCUtils.close(resultSet,statement,connection); } return false; } }
-
-