0

我正在使用 Mysql JDBC 驱动程序.. 但我有一些问题..

问题是当我SELECT在 java 源代码中使用 Query 时。

当我使用这个查询时:

select * from [name of table]

我已经成功地从数据库中获得了查询结果。

但是当我使用这个查询时:

 select * from student where (substring(stu_name,0,1)>= '가' and substring(stu_name,0,1) < '나') ;

我还没有从数据库中得到查询结果..

不同之处在于使用where与否。

有什么问题?

我怎么解决这个问题?

这是我下面的代码

此查询不起作用

select * from student where (substring(stu_name,0,1)>= '가' and substring(stu_name,0,1) < '나') ;

此查询运行良好

select * from student;

不同之处只是查询信息..其余的源代码绝对相同


我添加了我的 java 源代码 public class Center {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    String sql =  "select * from student where (substring(stu_name,0,1)>= '가' and substring(stu_name,0,1) < '나') ";
    String url = "jdbc:mysql://localhost:3306/test";
    String driverName = "com.mysql.jdbc.Driver";
    String id = "root";
    String password = "jsyun0415";
    Connection con = null;
    PreparedStatement prepareState = null;
    Statement stmt = null;
    ResultSet rs = null;
    ArrayList<String> list = new ArrayList<String>();
    ArrayList<String> list_second = new ArrayList<String>();

    try {
        Class.forName(driverName);
    } catch (ClassNotFoundException e) {
        System.out.println("Failed to load JDBC driver..");
        e.printStackTrace();
        return;
    }

    try {
        con = DriverManager.getConnection(url, id, password);
        stmt = con.createStatement();
        rs = stmt.executeQuery(sql);


            while (rs.next()) {
                list.add(rs.getNString("stu_no"));
                list_second.add(rs.getNString("stu_ename"));
            }

        //test = list.get(2);
    } catch (SQLException sqex) {
        System.out.println("SQLException: " + sqex.getMessage());
        System.out.println("SQLState: " + sqex.getSQLState());
    } finally {
        try {
            if (stmt != null)
                stmt.close();
            if (con != null)
                con.close();
            if (rs != null)
                rs.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }


}

}

4

3 回答 3

2

您需要在 JDBC 连接 URL 中设置字符编码:

String url = "jdbc:mysql://localhost:3306/test?useUnicode=yes&characterEncoding=UTF-8";

否则在连接时会自动检测客户端和服务器之间的字符编码,这意味着您查询中的韩文文本将被错误编码,并可能导致查询返回零结果。
您可以在 MySQL JDBC 驱动程序文档 -使用字符集和 Unicode中阅读更多相关信息

于 2013-11-06T12:35:39.277 回答
1

MySQL 函数“子字符串”参数 0 错误,只允许大于零。

于 2013-11-06T13:56:33.757 回答
1

这个答案表明Java代码没有问题;这是你的数据。

您可以在 MySQL 管理工具中运行查询并返回一个不为空的结果集吗?如果是,那么您的 Java 代码有问题。一定有一个错误,你要么没有提供,要么用空的 catch 块吞下。

您是否收到错误消息或堆栈跟踪,或者结果集为空?如果是后者,可能没有编号为 20001001 的学生行。

于 2013-11-06T12:18:57.717 回答