【问题标题】:Inserting File into Postgres database将文件插入 Postgres 数据库
【发布时间】:2014-01-12 09:52:09
【问题描述】:

我正在执行从 oracle 数据库到 postgres 9.0 数据库的数据迁移。所有字段都已成功传输,除非我尝试移动 file 列(Blob 对象在Oracle)进入postgres(postgres中的bytea)。这是我得到的例外

org.postgresql.util.PSQLException: ERROR: syntax error at or near "",#\\034\\034(7),01444\\037\'9=82<.342\\377\\333\\000C\\001\\011\\011\\011\\014\\013\\014\\030\\015\\015\\0302!\\034!22222222222222222222222222222222222222222222222222\\377\\300\\000\\021\\010\\000D\\0004\\003\\001""

下面是我用来在数据库中存储文件的代码:

Class.forName("org.postgresql.Driver");
        destDatabaseconnection = DriverManager.getConnection(
                rb.getString("DESTINATION_DATABASE_CONNECTION_URL"),
                rb.getString("DESTINATION_DATABASE_CONNECTION_USERNAME"),
                rb.getString("DESTINATION_DATABASE_CONNECTION_PASSWORD"));

        File file = new File("d://img//10090.gif");
        System.out.println(file.isFile());
        FileInputStream fis = new FileInputStream(file);
        prepstmt = destDatabaseconnection
                .prepareStatement("insert into entps.emp_photos(emp_number,emp_photo) values (?,?)");
        prepstmt.setInt(1, 1);

        prepstmt.setBinaryStream(2, fis, (int) file.length());
        int check = prepstmt.executeUpdate();
        System.out.println(check);

如果您曾经在 postgres 9.0

中存储过文件,请告诉我

【问题讨论】:

  • +1 从 Oracle 迁移到 PostgreSQL

标签: sql database oracle postgresql postgresql-9.1


【解决方案1】:

只是为了好玩,我刚刚创建了一个表(在 Postgres 9.2 中)

CREATE TABLE test
(
  id integer NOT NULL,
  file bytea,
  CONSTRAINT id PRIMARY KEY (id)
)

并已成功上传文件(使用驱动程序 8.3 和 9.3):

public static void main(String[] args) throws Exception {
    Class.forName("org.postgresql.Driver");
    Connection conn = DriverManager.getConnection("jdbc:postgresql:test", "postgres", "");
    File file = new File("/tmp/q");
    FileInputStream fis = new FileInputStream(file);
    PreparedStatement pstmt = conn
            .prepareStatement("insert into test(id,file) values (?,?)");
    pstmt.setInt(1, 1);
    pstmt.setBinaryStream(2, fis, (int) file.length());
    int check = pstmt.executeUpdate();
    System.out.println(check);
} 

请检查您的驱动程序。

【讨论】:

  • 我已经在 Postgres 8.3 中尝试过它正在工作的地方...你能检查一下你正在使用的 Postgres 版本吗?!!
  • 我使用的是 9.2,驱动程序版本为 8.3 和 9.3。请在问题中指定您的版本
  • 是的,它有效..实际上我使用的 Postgres 驱动程序没有指定它的版本,所以我认为它是唯一可用的驱动程序,但在搜索时我发现有许多更新的驱动程序可用,所以我使用了postgresql-9.3-1100.jdbc3 驱动程序,它工作。谢谢 Oleg Mikhev
猜你喜欢
  • 2017-05-20
  • 1970-01-01
  • 2020-11-07
  • 1970-01-01
  • 2020-07-22
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多