查询适用于 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

灵活查询适用于 HANA DB,但不适用于 HSQL DB

媒体查询适用于移动 Firefox,但不适用于移动 Chrome

MySQL 查询适用于 Workbench,但不适用于 C# 代码