1

私は問題があります。HSQLDBで「Selectdistinct」を使用しようとすると、結果のストリームは、個別の行のみを返すのではなく、すべての行を返します。

次の構文を試しました。

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