【问题标题】:Convert Java String to PostreSQL character varying («mpaa_rating»)?将 Java 字符串转换为 PostgreSQL 字符变化(«mpaa rating»)?
【发布时间】:2020-05-31 08:04:46
【问题描述】:

我正在编写一个 Java 方法,它根据 «rating» 列中的 «mpaa_rating» 数据类型在 the Postres sample 'DVD Rental' database 表中搜索 «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: 错误: 运算符不存在: mpaa_rating = 字符变化"

"提示:没有运算符与给定的名称和参数类型匹配。您 可能需要添加显式类型转换。”

如何将 Java 字符串转换为 Postres 字符变量?

【问题讨论】:

  • Java 字符串已经被转换成字符变化。问题是 mpaa_rating 不能与字符变化进行比较。这是什么数据类型?也许您需要在 SQL 语句中添加转换函数?
  • 您提到的数据库中不存在mpaa_rating 列。您确定错误发生在这段代码中吗?看起来不像。由于问题尚未明确定义,因此将投票关闭。
  • 表«film»中的«rating»列包含«mpaa_rating»数据类型

标签: java sql postgresql sqldatatypes


【解决方案1】:

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

 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

【讨论】:

    猜你喜欢
    • 2019-12-13
    • 2016-04-21
    • 1970-01-01
    • 2023-03-17
    • 2013-01-29
    • 2011-01-08
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多