【问题标题】:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'bro' in 'where clause'com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:“where 子句”中的未知列“bro”
【发布时间】:2015-11-11 12:02:18
【问题描述】:

我正在尝试查询 MySQL 数据库

statement = conn.createStatement();
String sql = "select * from file_post where gas_key='"+commun+"'";
fp =statement.executeQuery(sql);

commun 在哪里

String commun= (String) session.getAttribute("commun");

我遇到了异常:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:'where 子句'中的未知列'bro'

bro 是 commun 的值。

我也试过PreparedStatement,但这也给了我同样的例外。

但是当我在 MySQL 命令行中进行查询时:

select * from file_post where gas_key='bro';

那里很完美,并返回准确的数据。

我不明白为什么在 Java 类中使用相同的查询时会出现异常。

【问题讨论】:

  • 您是否在表格中新添加了这一列。提交它。它可能对您在该特定会话中使用的任何 IDE 的 SQL Developer 可见。
  • 小心:以这种方式构建查询会使您容易受到 SQL 注入 (read more) 的攻击。
  • @AmitBhati 先生,这个专栏不是新的
  • @WanderNauta 先生,我只是一个学生,我正在为一个大学项目做这个,所以我不太关心安全
  • @user3443275 你确定要给项目评分的人同样不关心吗? :)

标签: java mysql jdbc


【解决方案1】:

当您不匹配" 时,通常会发生此异常,为避免此类问题,请使用PreparedStatement

PreparedStatement st = con.prepareStatement("SELECT * FROM file_post WHERE gas_key=?");
st.setString(1,commun);
rs = st.executeQuery();

【讨论】:

  • 先生,我将其更改为 LIKE,但仍然抛出相同的异常
  • 先生,我也试过了(在问题中提到)但这也给了我同样的例外
  • 如果是这样,您必须发现映射的域列与数据库的不匹配
  • 如果所有列都被映射并且有setter和getter,请显示你的实体的映射来检查它
【解决方案2】:

你可以在设置变量后尝试打印preparedStatement吗...只是为了检查正在构建的查询...

System.out.println(preparedStatement);

这里的 fp 是什么?结果集?

【讨论】:

  • 是的 fp 先生是结果集,现在问题解决了,问题是我从连接池获得的连接不能正常工作,当我清理我的项目时它开始工作
  • 很好,你发现了问题......并自行解决......请不要叫我先生......!!
猜你喜欢
  • 2014-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-28
  • 2011-12-15
  • 1970-01-01
  • 2014-05-31
  • 1970-01-01
相关资源
最近更新 更多