引入工具类
当对数据库进行相关操作时,首先要连接数据库,如果每对数据库进行一次操作就要连接一次,就会有大量的代码重复,效率变低,并且浪费资源。而Java是面向对象的语言,三大特性之一:封装,就很好的解决了这个问题。将大量重复的操作放在一个工具类中,当需要使用这些操作时只需要调用这个工具类里的方法即可。
连接数据库
完整代码:
import java.io.FileInputStream;
import java.sql.*;
import java.util.Properties;
/**
* @author yuan_m
* @create 2022-06-14 14:42
*/
public class JDBCUtils {
private static String user;
private static String password;
private static String url;
private static String driver;
static {
FileInputStream fis = null;
try {
//1.读取配置文件
//1.1创建Properties对象
Properties p = new Properties();
//1.2创建流
fis = new FileInputStream("jdbc.properties");
//1.3调用方法
p.load(fis);
//1.4读取内容
user = p.getProperty("user");
password = p.getProperty("password");
url = p.getProperty("url");
driver = p.getProperty("driver");
System.out.println(user+" "+password+" "+url+" "+driver);
}catch (Exception e){
e.printStackTrace(); //打印错误信息
//终止程序运行(将编译时异常转换成运行时异常)
throw new RuntimeException(e.getMessage());
}finally {
if(fis != null){
try {
fis.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
}
//获取Connection对象
public static Connection getConnection() {
try {
Class.forName(driver);
Connection connection = DriverManager.getConnection(url, user, password);
return connection;
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
//关闭资源
public static void close(PreparedStatement ps, Connection connection) {
if (ps != null){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection != null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
其中关于配置文件的相关内容在:配置文件简述
之后再进行数据库连接时,只需要JDBCUtils.getConnection()调用即可
PreparedStatement接口
由以上链接可以得出,PreparedStatement对象已经预编译过,创建对象的方式为:
PreparedStatement ps = connection.PrepareStatement(sql);
/*
connection为Connection对象 ---- 由JDBCUtils.getConnection()返回值返回
sql为要执行的数据库的相关操作
*/
String sql = "insert into 表名(字段名1,字段名2,...) values(?,?,...)";
//?表示占位符
每个“?”的值必须在执行前通过setXXX()方法被提供
/*
ps.setInt(i,num); //第i个?如果是int型,赋值为num
ps.setString(j,"str"); //第j个?如果是String,赋值为str
*/
//举例:
有一个student表,表中有两个字段分别是:id int,name varchar(20)
sql语句为 insert into student(id,name),values(?,?)
则,ps.setInt(1,1001); //表示给第一个?赋值1001,即id = 1001
ps.setString(2,"Jerry"); //表示给第二个?赋值Jerry,即name = Jerry
执行sql语句
ps.executeUpdate() //对sql语句是增,删,改的操作执行
ps.executeQuery() //对数据库执行查找操作
完整代码
Connection connection = JDBCUtils.getConnection();
String sql = "insert into 表名(字段名1,字段名2,...) values(?,?,...)";
//sql = "update 表名 set 字段名1 = ? where 字段名2=?";
//sql = "delete from 表名 [where 字段名1=?]";
PreparedStatement ps = connection.PrepareStatement(sql);
ps.setXXX(parameterIndex,x); //根据需求编写
ps.executeUpdate();
//关闭资源 -- 相当于还回去
JDBCUtils.close(ps,connection);
版权声明:本文为weixin_45217677原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。