java - 使用 PreparedStatement 将 Java 枚举数组持久化到 Postgres 枚举数组

标签 java postgresql jdbc

我有一个 Java 枚举:

public enum Equipment { Hood, Blinkers, ToungTie, CheekPieces, Visor, EyeShield, None;}

和相应的 Postgres 枚举:

CREATE TYPE equipment AS ENUM ('Hood', 'Blinkers', 'ToungTie', 'CheekPieces', 'Visor', 'EyeShield', 'None');

在我的数据库中,我有一个表,其中有一列包含“设备”项目的数组:

CREATE TABLE "Entry" (
    id bigint NOT NULL DEFAULT nextval('seq'::regclass),
    "date" character(10) NOT NULL,
    equipment equipment[]
);

最后,当我运行我的应用程序时,我有一个“设备”枚举数组,我想使用准备好的语句将其持久保存到数据库中,但我一直不知道该怎么做.

StringBuffer sb =  new StringBuffer("insert into \"Entry\" ");
sb.append("( \"date\", \"equipment \" )");
sb.append(" values ( ?, ? )");
PreparedStatement ps = db.prepareStatement(sb.toString());

ps.setString("2010-10-10");
ps.set???????????

最佳答案

你应该阅读 this .

我建议您的代码看起来更像这样:

    // A column named "date" is probably illegal and not very illustrative.  "date" is a keyword for most databases.
    // Building a string that never changes again and again is a waste of CPU and heap
    private static final String INSERT_SQL =  "insert into Entry(date,equipment) values(?,?)";

    PreparedStatement ps = db.prepareStatement(INSERT_SQL);

    // Use the type system properly.  Dates should be DATE type columns in a database.  Why string?    
    ps.setDate(entryDate);

    // You shouldn't want to insert an array of values; that's not normalized.
    ps.setString(equipmentEnumValue.name());

关于java - 使用 PreparedStatement 将 Java 枚举数组持久化到 Postgres 枚举数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2917286/

相关文章:

java - OnBootReceiver 可以工作,但找不到 AlarmReceiver

Java (Apache POI) 如何在整个页面上拉伸(stretch) XWPFTable 行

python - Django Admin 显示对象 - 不使用 __unicode__ 或 __str__

postgresql - 何时打开/关闭与数据库的连接?

java - SQLDataException : invalid datetime format from HSQLDB

java - JDBC:更新表的最佳方法?

java - 无法解析 mojo org.apache.maven.plugins :maven-assembly-plugin:3. 1.1 的配置

Java 异常处理和 HttpSession

postgresql - 如何使用 PostgreSQL 代码片段?

java - 当我在 jdbc 的字符串查询中存储值时,Unicode 字符在 java 中不起作用