将 Java 字符串转换为 PostgreSQL 字符变化 («mpaa_rating»)?

Convert Java String to PostreSQL character varying («mpaa_rating»)?

我正在编写一个 Java 方法,根据 «rating» 列中的 «mpaa_rating» 数据类型搜索 the Postres sample 'DVD Rental' database table «films»。

public static void rechercheRating() {

        System.out.println("======= Ratings menu =========");
        System.out.println("\t 'G' ");
        System.out.println("\t 'PG' ");
        System.out.println("\t 'PG-13' ");
        System.out.println("\t 'R' ");
        System.out.println("\t 'NC-17' ");
        System.out.println("Entrez le rating désiré :");
        String userInput = sc.nextLine().toUpperCase(); 
        try {
            int foovalue = 10;

            PreparedStatement st = conn.prepareStatement("SELECT title, rating FROM film WHERE (rating = ?);");

            st.setString(1, userInput);

            ResultSet rs = st.executeQuery();
            System.out.printf("%-20s %-15s\n", "Film", "Rating");

            while (rs.next()) {

                System.out.printf("%-20s %-15s\n", rs.getString(1), rs.getString(2));

            }
            rs.close();
            st.close();
        } catch (SQLException ex) {
            Logger.getLogger(DVDrental.class.getName()).log(Level.SEVERE, null, ex);
        }

    }//rechercheRating

问题是 «mpaa_rating» 不是字符串数据类型。我在 IDE 中遇到的错误是

"org.postgresql.util.PSQLException: ERROR: operator does not exist: mpaa_rating = character varying"

"Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts."

如何将 Java 字符串转换为不同的 Postres 字符?

数据类型 «mpaa_rating» 的显式转换我添加到我的 SQL 准备语句中:

 public static void rechercheRating() {

        System.out.println("======= Ratings menu =========");
        System.out.println("\t 'G' ");
        System.out.println("\t 'PG' ");
        System.out.println("\t 'PG-13' ");
        System.out.println("\t 'R' ");
        System.out.println("\t 'NC-17' ");
        System.out.println("Entrez le rating désiré :");
        String userInput = sc.nextLine().toUpperCase();

        try {
            int foovalue = 10;

            PreparedStatement st = conn.prepareStatement("SELECT title, 
            rating FROM film WHERE (rating = ?::mpaa_rating);"); //added cast

            st.setString(1, userInput);

            ResultSet rs = st.executeQuery();
            System.out.printf("%-20s %-15s\n", "Film", "Rating");

            while (rs.next()) {

                System.out.printf("%-20s %-15s\n", rs.getString(1), rs.getString(2));

            }
            rs.close();
            st.close();
        } catch (SQLException ex) {
            Logger.getLogger(DVDrental.class.getName()).log(Level.SEVERE, null, ex);
        }

    }//rechercheRating

这会将复合类型转换为字符串类型。 documentation on casts.