为了根据表名和操作类型自动构造 SQL 执行数据库操作,可以设计一个通用的方法来处理这种情况。这里提供一个示例实现,使用 JDBC 进行数据库操作。假设你已经配置好了数据库连接池,并且已经有了连接。
一、新增操作
步骤 1: 构造 SQL 插入语句
我们需要一个方法来根据表名和要插入的数据构造 SQL 插入语句。
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Map;
public class SqlBuilder {
/**
* 构造插入语句
*
* @param tableName 表名
* @param data 要插入的数据
* @return 插入语句
*/
public static String buildInsertSql(String tableName, Map<String, Object> data) {
StringBuilder columns = new StringBuilder("(");
StringBuilder values = new StringBuilder("(");
boolean first = true;
for (Map.Entry<String, Object> entry : data.entrySet()) {
if (!first) {
columns.append(", ");
values.append(", ");
}
columns.append(entry.getKey());
values.append("?");
first = false;
}
columns.append(")");
values.append(")");
return "INSERT INTO " + tableName + columns + " VALUES " + values;
}
}
步骤 2: 执行参数化插入操作
接下来,我们需要一个方法来执行参数化的插入操作。
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Map;
public class DatabaseInserter {
/**
* 执行参数化插入操作
*
* @param tableName 表名
* @param data 要插入的数据
*/
public static void executeInsert(String tableName, Map<String, Object> data) {
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = DatabaseConnection.getDataSource().getConnection();
String sql = SqlBuilder.buildInsertSql(tableName, data);
pstmt = conn.prepareStatement(sql);
int index = 1;
for (Object value : data.values()) {
pstmt.setObject(index++, value);
}
int rowsAffected = pstmt.executeUpdate();
System.out.println(rowsAffected + " row(s) inserted.");
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeResources(conn, pstmt);
}
}
private static void closeResources(Connection conn, PreparedStatement pstmt) {
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
示例使用
现在我们可以使用上面定义的方法来执行参数化插入操作了:
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, Object> dataToInsert = new HashMap<>();
dataToInsert.put("username", "new_user");
dataToInsert.put("email", "new_user@example.com");
DatabaseInserter.executeInsert("users", dataToInsert);
}
}
在这个示例中,我们构造了一个 SQL 插入语