2013-05-31 41 views
-1

我正在使用MySQL和JDBC将数据库用于JSP中的站点。查询适用于phpMyAdmin,但不适用于Java

我为搜索命令生成一个SQL查询,当我在phpMyAdmin上手动运行该查询并且它返回1行匹配时,查询起作用。

但执行我的查询后,ResultSet是空的(我无法获得表的值)。

这是执行查询的代码:

SELECT * FROM产品WHERE个prodName LIKE '%מהיר%' AND存在= 1

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; 
} 

例如查询

该代码:

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。

我该如何解决?

+0

什么是SQL查询的重复? –

+0

您已发布两个(几乎)相同/重复的问题。删除他们不污染SO – informatik01

+0

尝试[这个答案](http://stackoverflow.com/questions/14738732/mysql-does-not-store-properly-some-utf8-chars/14738790#14738790) – Eran

回答

2

您没有设置MySQL连接编码,因此将使用默认编码。默认编码可能是latin1,它不包括希伯来字符。这意味着SQL MySQL将实际执行的更像... WHERE prodName LIKE '%????%' ...,并且不会返回任何结果。

一个可能的修复程序设置,不支持希伯来文,像utf8编码:

ds.setServerName("localhost"); 
    ds.setEncoding("utf8"); 
+0

我以为关于它,但在phpmyadmin中,我创建了列作为utf-8,并且当我添加这行ds.setEncoding(“utf8”); ,问题保持原样,SQL查询是... WHERE prodName LIKE'%מהיר%'...所以问题我想是其他地方? –

+0

查询的起源是什么?你能确定查询中的希伯来字符没有以某种方式被破坏吗?顺便说一句,这是很好的列在utf8编码,但字符编码用于客户端连接独立。 – Joni

相关问题