Java JDBC高封装Util类
Java JDBC高封装Util类
import java.sql.*;
public class JdbcUtil {
private static final String URL = "jdbc:mysql://localhost:3306/database?serverTimezone=UTC&useSSL=false";
private static final String USERNAME = "username";
private static final String PASSWORD = "password";
private static Connection connection = null;
static {
try {
connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
}
}
public static PreparedStatement getPreparedStatement(String sql, Object... args) throws SQLException {
PreparedStatement preparedStatement = connection.prepareStatement(sql);
for (int i = 0; i < args.length; i++) {
preparedStatement.setObject(i + 1, args[i]);
}
return preparedStatement;
}
public static ResultSet executeQuery(String sql, Object... args) throws SQLException {
PreparedStatement preparedStatement = getPreparedStatement(sql, args);
return preparedStatement.executeQuery();
}
public static int executeUpdate(String sql, Object... args) throws SQLException {
PreparedStatement preparedStatement = getPreparedStatement(sql, args);
return preparedStatement.executeUpdate();
}
public static void close() {
try {
if (connection != null && !connection.isClosed()) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
使用方法:
- 在需要使用JDBC连接的类中导入该util类。
getPreparedStatement
方法用于获取预编译语句对象并填充参数,返回PreparedStatement
对象。executeQuery
方法用于执行SELECT语句并返回查询结果集,使用时需要传入SQL语句和占位符参数。executeUpdate
方法用于执行增删改操作并返回影响的行数,使用时需要传入SQL语句和占位符参数。- 使用完毕后,调用
close
方法关闭连接。
请注意修改URL
、USERNAME
和PASSWORD
为正确的值。
举例:
假设我们有一个名为users
的表,包括id
、name
和age
三个字段。现在要查询出所有用户的姓名,可以这样做:
import java.sql.*;
public class Main {
public static void main(String[] args) {
try {
String sql = "SELECT name FROM users";
ResultSet resultSet = JdbcUtil.executeQuery(sql);
while (resultSet.next()) {
String name = resultSet.getString("name");
System.out.println(name);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.close();
}
}
}
上述代码中我们调用了JdbcUtil
工具类的executeQuery
方法来执行SQL查询语句,并获取了查询结果集。然后,我们遍历结果集并打印出各个用户的姓名。
如果需要执行连接关闭操作,则需要在finally块中调用JdbcUtil
工具类的close
方法来释放连接。
以上仅是一个简单的例子,当然在实际开发中需要更多的参数设置和逻辑控制。
补充:
使用Vector数据结构将查询结果放置到表格控件中。
以下是一个简单的例子,代码中使用了javax.swing
包中的JTable
和DefaultTableModel
类:
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
public class Main {
public static void main(String[] args) {
try {
// 执行查询语句
String sql = "SELECT * FROM users";
ResultSet resultSet = JdbcUtil.executeQuery(sql);
// 将查询结果封装为Vector数据结构
Vector<String> columnNames = new Vector<>();
columnNames.add("id");
columnNames.add("name");
columnNames.add("age");
Vector<Vector<Object>> data = new Vector<>();
while (resultSet.next()) {
Vector<Object> row = new Vector<>();
row.add(resultSet.getInt("id"));
row.add(resultSet.getString("name"));
row.add(resultSet.getInt("age"));
data.add(row);
}
// 创建表格,并设置数据
DefaultTableModel model = new DefaultTableModel(data, columnNames);
JTable table = new JTable(model);
// 将表格放置到窗口中
JFrame frame = new JFrame();
frame.getContentPane().add(new JScrollPane(table));
frame.setPreferredSize(new Dimension(500, 300));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.close();
}
}
}
在上述代码中,我们将查询结果封装为了一个Vector<Vector<Object>>
类型的二维向量,其中外层向量表示所有行,内层向量则表示每一行上的数据,每个内层向量的第一个元素表示"id"列的值,第二个元素表示"name"列的值,第三个元素表示"age"列的值。然后,我们使用DefaultTableModel
类将查询结果设置到表格中,并最终将表格放到窗口中以便查看。
此外,需要注意的是,在实际开发中,可能需要对查询结果进行更多的处理和格式控制。这里只是一个简单的使用例子,仅供参考。
转载自:https://juejin.cn/post/7226717655905402939