查询适用于 phpMyAdmin,但不适用于 Java [重复]
Posted
技术标签:
【中文标题】查询适用于 phpMyAdmin,但不适用于 Java [重复]【英文标题】:Query works on phpMyAdmin, but not in Java [duplicate] 【发布时间】:2013-05-27 11:33:42 【问题描述】:我正在使用 mysql 和 JDBC 到 JSP 中的站点的数据库。
我为搜索命令生成一个 SQL 查询,当我在 phpMyAdmin 上手动运行该查询并返回 1 行匹配时,该查询有效。
但在执行我的查询后,ResultSet 为空(我无法获取表的值)。
这是执行查询的代码:
public static Product findLikeProd(String ProductName)
Product Product = null;
try
ResultSet rs = Database.executeSelect1("SELECT * FROM products WHERE prodName LIKE '%"+ProductName+"%' AND exist=1");
if (rs.next())
Product = new Product(rs.getInt("PKid"), rs.getString("prodName"), rs.getString("description"), rs.getDouble("price"), rs.getInt("deliveryTime"), rs.getString("imgUrl"));
//Database.closeCon();
catch (SQLException e)
e.printStackTrace();
return Product;
例如一个查询:
SELECT * FROM Products WHERE prodName LIKE '%מהיר%' AND exists=1
代码:
public synchronized static ResultSet executeSelect1(String sqlCmd)
ResultSet rs = null;
try
MysqlDataSource ds = new MysqlConnectionPoolDataSource();
ds.setServerName("localhost");
ds.setDatabaseName("tarazJsp");
con=ds.getConnection("root","");
Statement st = con.createStatement();
rs = st.executeQuery(sqlCmd); //The problem is here. rs is received(!=null) but I can't get his parameters.(empty)
catch (SQLException e)
e.printStackTrace();
return rs;
当我尝试从 rs 获取字符串时,它会抛出 SQLException。
我应该如何解决它?
【问题讨论】:
什么是 SQL 查询重复? 您发布了两个(几乎)相同/重复的问题。删除它们以不污染 SO 试试this answer 【参考方案1】:您没有设置 MySQL 连接编码,因此将使用默认编码。默认编码可能是latin1
,不包括希伯来字符。这意味着 MySQL 将实际执行的 SQL 将更像 ... WHERE prodName LIKE '%????%' ...
并且不会返回任何结果。
一个可能的解决方法是设置一个支持希伯来语的编码,例如utf8
:
ds.setServerName("localhost");
ds.setEncoding("utf8");
【讨论】:
我想过,但在 phpmyadmin 我将列创建为 utf-8,当我添加这一行时 ds.setEncoding("utf8"); ,问题保持不变,sql查询是... WHERE prodName LIKE '%מהיר%' ...所以我猜问题出在其他地方? 查询的来源是什么?你能确定查询中的希伯来语字符没有以某种方式被破坏吗?顺便说一句,列用 utf8 编码很好,但用于客户端连接的字符编码独立。以上是关于查询适用于 phpMyAdmin,但不适用于 Java [重复]的主要内容,如果未能解决你的问题,请参考以下文章
为啥这种“嵌套连接”适用于 PDO 而不适用于 MySql cli?
为啥 mysql 中的这个查询适用于该表,但不适用于该表的视图?
用于 DynamoDB 查询的 Python 代码适用于 v3.6,但不适用于 python 2.7