JDBCUtils(JDBC工具类)
1.通过.class类文件获取流或者ClassLoader类加载器获取当前src路径下的文件
...\src\pro.properties
url=jdbc:mysql://127.0.0.1:3306/day3?serverTimezone=UTC
user=root
password=root
driver=com.mysql.cj.jdbc.Driver
2.创建类jdbcUtils1包含3个方法
- 可以把几个字符串定义成边量
- 用户名
- 密码
- URL
- 驱动类
- statci{},静态代码块的内容只随着 类的加载 而加载一次
- 得到数据库的连接:
getConnection() - 关闭所有打开的资源
close(Connection conn,Statement stmt)close(Connection conn,Statement stmt,ResultSet rs)
package demo.jdbcutils01;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;
public class JDBCUtils1 {
private static String url;
private static String user;
private static String password;
private static String driver;
public static void main(String[] args) {
JDBCUtils1 j1 = new JDBCUtils1();
j1.getConnection();
}
//执行顺序:(优先级从高到低。)静态代码块>mian方法>构造代码块>构造方法。
// 静态代码块只执行一次。构造代码块在每次创建对象是都会执
//tatic代码块指的是static{}包裹的代码块,可以通过Class.forName("classPath")的方式唤醒代码的static代码块,只执行一次。
//构造块:直接在类中定义且没有加static关键字的代码块称为{}构造代码块。构造代码块在创建对象时被调用,每次创建对象都会被调用
static {
Properties p = new Properties();
ClassLoader classLoader = JDBCUtils1.class.getClassLoader();
URL resource = classLoader.getResource("jdbc.properties");
String path = resource.getPath();
// path = URLDecoder.decode(path,"utf-8");文件路径有中文的话需要转为utf-8编码格式
try {
p.load(new FileReader(path));
} catch (IOException e) {
e.printStackTrace();
}
url = p.getProperty("url");
user = p.getProperty("user");
password = p.getProperty("password");
driver = p.getProperty("driver");
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection(){
try {
return DriverManager.getConnection(url,user,password);
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
public static void close(Connection con, Statement stat){
if (con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stat != null) {
try {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(Connection con, Statement stat, ResultSet set){
if (con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stat != null) {
try {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (set != null) {
try {
set.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
3.jdbcUtil工具类实现,用户登录注册案例
package demo.jdbcutils01;
import netscape.security.UserTarget;
import java.sql.*;
import java.util.Scanner;
public class login_demo {
private static Connection con = JDBCUtils1.getConnection();
private static Statement stat = null;
private static PreparedStatement pstat = null;
private static ResultSet set = null;
private static int i;
public static void main(String[] args) {
while (true){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的选择(1、登录(可SQL注入),2、登录(防止SQL注入)3、注册,4、退出):");
String str = scanner.nextLine();
if (str.equals("4")){
JDBCUtils1.close(con,stat,set);
JDBCUtils1.close(con,pstat,set);
System.exit(0);
}
System.out.println("请输入 用户名");
String username = scanner.nextLine();
System.out.println("请输入 密码");
String password = scanner.nextLine();
switch (str){
case "1":
login(username,password);
break;
case "2":
login2(username,password);
break;
case "3":
register(username,password);
break;
default:
System.out.println("无此选项");
break;
}
}
}
public static void login(String username,String password){
String sql = "select * from userinfo where username = '"+username+"' and password = '"+password+"';";
System.out.println(sql);
try {
stat = con.createStatement();
set = stat.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (set.next()){
System.out.println("登录成功");
}else {
System.out.println("登录失败");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void login2(String username,String password){
String sql = "select * from userinfo where username = ? and password = ?;";
System.out.println(sql);
try {
pstat = con.prepareStatement(sql);
pstat.setString(1,username);
pstat.setString(2,password);
set = pstat.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (set.next()){
System.out.println("登录成功");
}else {
System.out.println("登录失败");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void register(String username,String password){
String sql = "insert into userinfo values (null,'"+username+"','"+password+"');";
System.out.println(sql);
try {
stat = con.createStatement();
i = stat.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
}
if (i == 1){
System.out.println("注册成功");
}else {
System.out.println("注册失败");
}
}
}

浙公网安备 33010602011771号