1. 配置文件:jdbc.properties
# url:jdbc:mysql:///BDName # user=username # password=password # 驱动:driver=com.mysql.jdbc.Driver url=jdbc:mysql:///ideatest user=root password=cl170127 driver=com.mysql.jdbc.Driver
2. JDBC工具类:JDBCUtils.class
package com.test.utils; import java.io.FileReader; import java.io.IOException; import java.net.URL; import java.sql.*; import java.util.Properties; /** * JDBC工具类: * 1.抽取注册驱动 * 2.抽取一个方法获取连接对象 * 3.抽取一个方法释放资源 * * 工具类特点: * 1.所有方法都是静态的,方便调用 */ public class JDBCUtils { /** * 配置文件的方式来记录参数: * jdbc.properties */ private static String url; private static String user; private static String password; private static String driver; /** * 文件的读取:只需读取一次即可拿到数据值。可以使用静态代码块的方式,随着类的加载而加载 */ static { // 读取文件:BufferReader,FileReader...这里使用Properties集合类 try { // 1.创建Properties集合类,用来加载jdbc.properties Properties pro = new Properties(); // 获取src路径下的文件:ClassLoader类加载器 ClassLoader classLoader = JDBCUtils.class.getClassLoader(); URL res = classLoader.getResource("jdbc.properties"); String path = res.getPath(); // System.out.println(path); // /D:/develop/Java/IDEA/IDEWorkspace/200726/out/production/200726_JDBC/jdbc.properties // 2.加载文件 // 静态代码块中的异常只能处理不能抛出,因为抛要借助方法 pro.load(new FileReader(path)); // 3.获取数据,赋值:键的名称要跟配置文件中的名称一致 url = pro.getProperty("url"); user = pro.getProperty("user"); password = pro.getProperty("password"); driver = pro.getProperty("driver"); // 4.注册驱动 Class.forName(driver); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } /** * 获取连接 * @return 连接对象 */ // 静态方法,方便调用 public static Connection getConnection() throws SQLException { return DriverManager.getConnection(url,user,password); } /** * 释放资源 * @param stmt * @param coon */ public static void close(Statement stmt, Connection coon){ // 先释放小的,再释放大的 if (stmt != null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } //两个不能写一起,如果第一个错误,会进到异常处理里面,则可能会跳过第二个 if (coon != null){ try { coon.close(); } catch (SQLException e) { e.printStackTrace(); } } } /** * 释放资源 * @param stmt * @param coon * @param rs */ public static void close(ResultSet rs, Statement stmt, Connection coon){ // 先释放小的,再释放大的 if (rs != null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (stmt != null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } //两个不能写一起,如果第一个错误,会进到异常处理里面,则可能会跳过第二个 if (coon != null){ try { coon.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
3. 测试类:JDBCDemo.class
package com.test.JDBCDemo; //import com.sun.applet2.preloader.event.PreloaderEvent; import com.test.utils.JDBCUtils; import java.sql.*; import java.util.Scanner; /** * 写在前面: * 一定要记得导入驱动jar包!! * * 登录案例 * 需求: * 1.通过键盘录入用户名,密码 * 2.判断用户是否登录成功 * 步骤: * 1.创建数据库和表:ideaTest-->userTab * 2.创建一个登录方法 */ public class JDBCDemo { public static void main(String[] args) { // 1.键盘录入用户名,密码 Scanner sc = new Scanner(System.in); System.out.println("请输入用户名:"); String username = sc.nextLine(); System.out.println("请输入密码:"); String password = sc.nextLine(); // 2.调用方法 boolean flag = new JDBCDemo().login(username, password); // 3.判断结果 if (flag){ System.out.println("登陆成功!"); }else { System.out.println("登陆失败!用户名或密码错误!"); } } /** * 登录方法:使用PreparedStatement实现 * @param username * @param password * @return */ public boolean login(String username, String password){ if (username == null || password == null){ return false; } Connection coon = null; // Statement stmt = null; ResultSet res = null; PreparedStatement pstmt = null; // 1.连接数据库 try { coon = JDBCUtils.getConnection(); // 2.定义sql语句 String sql = "select * from userTab where username = ? and password = ?"; // 3.获取执行sql的对象 // stmt = coon.createStatement(); // PreparedStatement 防止sql注入 pstmt = coon.prepareStatement(sql); // 给?赋值 pstmt.setString(1,username); pstmt.setString(2,password); // 4.执行sql // res = stmt.executeQuery(sql); res = pstmt.executeQuery(); // 5.判断 return res.next(); } catch (SQLException e) { e.printStackTrace(); }finally { JDBCUtils.close(res,pstmt,coon); } return false; } }
4.项目分布
5.jar包
链接:https://i.cnblogs.com/files