1

我有个问题。当我尝试在 HSQLDB 中使用“选择不同的”时,结果流返回我所有的行,而不是我只返回不同的行。

我尝试了以下语法:

SELECT DISTINCT FROM ratings UserID order by UserID;
SELECT DISTINCT (UserID) FROM ratings order by UserID;
SELECT DISTINCT UserID FROM ratings;
SELECT DISTINCT (UserID) FROM ratings;

它们都不起作用。问题是什么?

如果有人能够帮助我,我将不胜感激。谢谢你。

我执行操作的功能代码如下:

private void readUserFile(String filename) {

    try {

        //Verify if file users exists
        boolean exists = (new File(filename)).exists();

        if (!exists) {
            //If file users not exists create one, bases on distinct users that exist in ratings table 

            ResultSet rsUsers = jdbcTemplate.getDataSource().getConnection().createStatement().executeQuery("SELECT DISTINCT UserID FROM ratings order by UserID;");

            List<String> users = new ArrayList<String>();

            while (rsUsers.next()) {

                users.add(String.valueOf(rsUsers.getInt(1)));                  
            }

            rsUsers.close();

            //Create and write to file
            BufferedWriter f = null;
            f = new BufferedWriter(new FileWriter(filename));

            for (String user : users) {
                f.write(user);
                f.newLine();
            }
            f.close();

        }

        PreparedStatement prstInsert = con.prepareStatement("INSERT INTO users VALUES (?)");
        BufferedReader in = new BufferedReader(new FileReader(filename));
        int i = 0;
        while (true) {
            String s = in.readLine();
            if (s == null) { // end of file 
                log.info("Total imported users: " + i);
                break;
            }
            i++;

            int userid = Integer.parseInt(s);
            prstInsert.setInt(1, userid);

            if (i != 0 && Math.round((double) i / 100) == ((double) i / 100)) {
                log.info("Imported users: " + i);
            }
            prstInsert.executeUpdate();
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}
4

0 回答 0