java里sql语句select from where=或!=列名条件是变量时怎么写,总获取不到相应的记录。
针对这个问题,我建议在编写Java语言的SQL语句时,可以使用预编译的方式,将需要动态设置的列名以参数的形式传入SQL语句中。具体步骤如下:
1.使用PreparedStatement代替Statement执行SQL语句,因为PreparedStatement可以预编译SQL语句,提高了执行效率,也可以避免SQL注入攻击。
2.在SQL语句中使用占位符 ? 代替需要动态设置的列名,例如:SELECT * FROM table_name WHERE ? = ?。
3.调用PreparedStatement的setString方法,将需要动态设置的列名以字符串的形式传入。
4.再调用setXXX方法(XXX为具体的数据类型,例如setInt、setDouble等),将需要设定的值传入。
5.执行SQL语句,得到结果集。
以下是参考代码示例:
String columnName = "student_name"; // 需要动态设置的列名
String columnValue = "张三"; // 需要设定的值
// 创建连接对象、预编译SQL语句
Connection conn = dataSource.getConnection();
PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM student_table WHERE ? = ?");
// 设置占位符参数的值
pstmt.setString(1, columnName);
pstmt.setString(2, columnValue);
// 执行SQL语句,得到结果集
ResultSet rs = pstmt.executeQuery();
// 遍历结果集,读取数据
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("student_name");
int age = rs.getInt("age");
// 其他字段的读取操作
}
需要注意的是,在使用预编译的方式时,不能使用占位符代替列名和表名,只能代替具体的值或条件。如果需要动态设置表名或列名的话,需要使用字符串拼接的方式,但是这样容易引发SQL注入攻击,需要谨慎处理。
你应该是变量两边没加 单引号,导致识别成了表字段。
最好还是用 占位符 ?,用PrepareStatement设置参数
获取不到记录报什么错误,还是单纯的查询到0行?
如果报错误,仔细看错误信息,把错误排除就好了
如果不报错误,仔细看数据内容和类型,不要把字符串和数字比较,不要多写少写空格
已解决。按上述方法即可。