【问题标题】:select query error fired in mysql在 mysql 中触发选择查询错误
【发布时间】:2013-05-03 17:24:59
【问题描述】:

当我尝试执行以下代码时,我收到此错误 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'NIRAV' in 'where clause'

package all_forms;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.swing.JOptionPane;

public class Select_operation {

private Connection con=null;
private PreparedStatement pstmt=null;
private ResultSet rs=null;
String query;
public Select_operation(Connection conn)
{
    con=conn;
}
public ResultSet select(String search)
{
    query="select * from student where id="+search+" or name like'"+search+"%'";
    try
    {
        pstmt=con.prepareStatement(query);
        rs=pstmt.executeQuery();
    }
    catch(Exception e)
    {
        JOptionPane.showMessageDialog(null, ""+e, "Error",JOptionPane.ERROR_MESSAGE);
    }
    return rs;
}

}

【问题讨论】:

  • 1) 您在like 周围使用记号(') 而不是反引号(`) 对吗? 2)传入的搜索值是多少?根据您对该站点的名称和它正在查看的值,我猜您正在搜索您的姓名,系统将其解释为列名而不是搜索字符串。你真的应该考虑使用参数化查询,因为它会减少 SQL 注入并减少此类错误的发生。
  • 变量search的值是多少?
  • @EdGibbs 在搜索中我将传递 id 或 name。
  • 知道了。 JW 已经想通了。您对search = 'NIRAV' 的查询将转换为... WHERE id=NIRAV or name like'NIRAV%',将id=NIRAV 视为比较列。还要听取 JW 对准备好的陈述的建议——它会延长你的职业生涯:)
  • @EdGibbs 谢谢我正在学习这些所有这些编码,我真的很喜欢它,谢谢你的支持。

标签: java mysql swing


【解决方案1】:

ID 的值应该用字符串包裹,因为您提供的不是数字值。

query="select * from student where id='"+search+"' or name like '"+search+"%'";
                                      ^ HERE     ^

您应该考虑使用PreparedStatement 来避免使用SQL Injection

// con is your active connection

String sqlStatement = "SELECT * FROM student WHERE id = ? OR name LIKE ?";
PreparedStatement prest = con.prepareStatement(sqlStatement);
prest.setString(1, search);
prest.setString(2, search + "%");
ResultSet _set = prest.executeQuery();

你还应该在类的顶部添加这一行

import java.sql.*;

PreparedStatements 避免你的代码被 sql 注入。

more on this link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    相关资源
    最近更新 更多