案例一:根据用户输入的条件查询员工信息
假设我们有一个员工表 employees
,包含 id
、name
、age
、department
等字段。用户可以输入姓名、年龄范围和部门来查询员工信息。
在 Java 中使用 JDBC 实现动态 SQL 如下:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class DynamicSQLExample {
public static void main(String[] args) {
String name = "John";
int minAge = 25;
int maxAge = 35;
String department = "Marketing";
String sql = "SELECT * FROM employees WHERE 1 = 1 ";
if (name!= null &&!name.isEmpty()) {
sql += "AND name =? ";
}
if (minAge > 0 && maxAge > 0) {
sql += "AND age BETWEEN? AND? ";
}
if (department!= null &&!department.isEmpty()) {
sql += "AND department =? ";
}
try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password");
PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
int parameterIndex = 1;
if (name!= null &&!name.isEmpty()) {
preparedStatement.setString(parameterIndex++, name);
}
if (minAge > 0 && maxAge > 0) {
preparedStatement.setInt(parameterIndex++, minAge);
preparedStatement.setInt(parameterIndex++, maxAge);
}
if (department!= null &&!department.isEmpty()) {
preparedStatement.setString(parameterIndex++, department);
}
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
// 处理查询结果
System.out.println("ID: " + resultSet.getInt("id"));
System.out.println("Name: " + resultSet.getString("name"));
System.out.println("Age: " + resultSet.getInt("age"));
System.out.println("Department: " + resultSet.getString("department"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
案例二:根据不同的排序条件对数据进行排序
假设我们有一个产品表 products
,包含 id
、name
、price
等字段。用户可以选择按照价格升序或降序排序。
DECLARE @sortOrder VARCHAR(10)
SET @sortOrder = 'ASC' -- 或者 'DESC'
DECLARE @sql NVARCHAR(MAX)
SET @sql = 'SELECT * FROM products ORDER BY price ' @sortOrder
EXEC sp_executesql @sql
案例三:根据不同的表进行查询
假设有多个相关但结构相似的表,如 sales_2023
、sales_2024
,用户可以选择查询的表。
DECLARE @tableName VARCHAR(50)
SET @tableName ='sales_2024' -- 或者 'ales_2023'
DECLARE @sql NVARCHAR(MAX)
SET @sql = 'SELECT * FROM ' @tableName
EXEC sp_executesql @sql
这些案例展示了动态 SQL 在不同场景下的应用,能够根据运行时的条件灵活地构建和执行 SQL 语句。
评论(0)