简体   繁体   English

在Java中执行查询不会返回结果,但是在mysql工作台中仍会返回结果

[英]execute query in java not return results but in mysql workbench still return results

This query: 该查询:

    SELECT 
    r.report_id,
    r.user_id,
    u.user_name,
    u.user_mail,
    d.department_name,
    r.report_comment,
    r.report_target_date,
    r.report_create_date,
    r.report_revised_date,
    r.report_root_id,
    report_revised_id
FROM
    report r
        JOIN
    user u ON u.user_id = r.user_id
        JOIN
    department d ON u.department_id = d.department_id
        JOIN
    authority a ON r.user_id = a.user_src_id
        AND a.user_dest_id = 131
WHERE
    r.report_target_date BETWEEN '2014-07-23 23:59:00' AND '2014-08-22 00:00:00'
    AND r.report_comment LIKE '%事務%'

In mysql workbench this query has return value but when using it in java it's not returning anything: 在mysql工作台中,此查询具有返回值,但是在Java中使用该查询时不会返回任何内容:

Statement stmt = connection.createStatement(); 
ResultSet rs = null;
rs = stmt.executeQuery(query);

In mysql workbench this query has return value but rs return is empty. 在mysql工作台中,此查询具有返回值,但rs return为空。

You pass Japanese characters into the query. 您将日语字符传递到查询中。 This could easily be a character encoding issue. 这很容易是字符编码问题。

Use a PreparedStatement and insert the value through a setString() call which will properly take care of the encoding. 使用PreparedStatement并通过setString()调用插入值,该调用将正确处理编码。

Modify your query to have a parameter (marked by a question mark): 修改query以使其具有参数(以问号标记):

...
WHERE
    r.report_target_date BETWEEN '2014-07-23 23:59:00' AND '2014-08-22 00:00:00'
    AND r.report_comment LIKE ?

And the Java code: 和Java代码:

PreparedStatement ps = connection.prepareStatement(query);
ps.setString(1, "%事務%"); // Parameter index is 1-based
ResultSet rs = ps.executeQuery();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM