У меня есть код для сохранения двоичного файла в PostgreSQL, я использую JDK 1.5. но у меня ошибка..
И после того, как я напечатаю оператор вставки, я попробую в своей консоли postgresql что-то вроде этой ошибки:
File file = new File("E:\\myimage.gif");
FileInputStream fis;
try {
fis = new FileInputStream(file);
PreparedStatement ps = conn.prepareStatement("INSERT INTO golf_fnb.coba VALUES (?)");
ps.setBinaryStream(1, fis, (int)file.length());
System.out.println("SQl: "+ps);
ps.executeUpdate();
ps.close();
fis.close();
} catch (FileNotFoundException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
и это ошибка в моей консоли eclipse:
org.postgresql.util.PSQLException: ERROR: syntax error at or near "\"
at org.postgresql.util.PSQLException.parseServerError(PSQLException.java:139)
at org.postgresql.core.QueryExecutor.executeV3(QueryExecutor.java:152)
at org.postgresql.core.QueryExecutor.execute(QueryExecutor.java:100)
at org.postgresql.core.QueryExecutor.execute(QueryExecutor.java:43)
at org.postgresql.jdbc1.AbstractJdbc1Statement.execute(AbstractJdbc1Statement.java:517)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:50)
at org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:273)
at finger.ConsoleUserInterfaceFactory$ConsoleUserInterface.verify4(ConsoleUserInterfaceFactory.java:605)
at finger.ConsoleUserInterfaceFactory$ConsoleUserInterface.run(ConsoleUserInterfaceFactory.java:117)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:651)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:676)
at java.lang.Thread.run(Thread.java:595)
Какой тип данных у столбца?
@JoakimDanielson BYTEA




Я думаю, что основная ошибка заключается в использовании столбца. Синтаксис: INSERT INTO TABLE(col1, ...) VALUES(val1, ...).
Это может быть и ты(or someone having a similar problem) intendedОБНОВЛЕНИЕ golf_fnb SET coba = ? ГДЕ id = ?`. Для ВСТАВКИ:
try (FileInputStream fis = new FileInputStream(file);
PreparedStatement ps = conn.prepareStatement("INSERT INTO golf_fnb(coba) VALUES (?)",
Statement.RETURN_GENERATED_KEYS)) {
ps.setBinaryStream(1, fis, (int)file.length());
System.out.println("SQl: "+ps);
int updateCount = ps.executeUpdate();
if (updateCount == 1) {
try (ResultSet rs = ps.getGeneratedKeys()) {
if (rs.next()) {
long id = rs.getLong(1);
System.out.println("ID " + id);
return;
}
}
}
} catch (SQLException | IOException e) {
e.printStackTrace();
}
\', апостроф может вызвать некоторые проблемы. Вместо этого, возможно, должен быть \047. Я надеюсь, что это восьмеричное преобразование драйвером исчезнет с новым синтаксисом выше.Спасибо за ваш ответ, наконец, у меня возникла проблема, что я должен обновить свой драйвер JDBC postgresql.
@khelwood я обновил свой вопрос