java里sql语句

java里sql语句select from where=或!=列名条件是变量时怎么写,总获取不到相应的记录。

  • 以下回答由chatgpt基于相关博客总结生成:

    针对这个问题,我建议在编写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行?
如果报错误,仔细看错误信息,把错误排除就好了
如果不报错误,仔细看数据内容和类型,不要把字符串和数字比较,不要多写少写空格

已解决。按上述方法即可。