ORA-01460: невыполнено или неразумно - PullRequest
1 голос
/ 11 апреля 2011

Я пытаюсь выполнить этот запрос в базе данных Oracle, но, к сожалению, я получаю эту ошибку, пожалуйста, помогите мне: (

java.sql.SQLException: ORA-01460: запрошено невыполненное или необоснованное преобразование Сейчас эта проблема решена, и у меня есть другое исключение: Я меняю эту строку

 pstmt.setBinaryStream(7, fis, (int) file.length());

с

 pstmt.setBinaryStream(7, fis, (long) file.length());

Исключительная ситуация в потоке "AWT-EventQueue-0"

для текстового файла проблема не возникает, но при попытке загрузить файл JPG я получаю эту ошибку.

    PreparedStatement pstmt = 
                          conn.prepareStatement("INSERT INTO PM_OBJECT_TABLE( " +
                          "N_ACTIVITY_ID, V_NAME,N_SIZE, D_MODIFY,N_CATEGORY, N_NODE_ID ,O_OBJECT) " +
                          " VALUES ( ? , ? , ? , ? , ? , ? ,?)");
                pstmt.setLong(1, N_ACTIVITY_ID);
                pstmt.setString(2, file.getName());
                pstmt.setLong(3, file.length());
                java.util.Date date = new java.util.Date(); 
                java.sql.Date sqlDate = new java.sql.Date(date.getTime()); 
                pstmt.setDate(4,sqlDate);
                pstmt.setInt(5, N_CATEGORY);
                pstmt.setLong(6, N_NODE_ID);
                pstmt.setBinaryStream(7, fis, (int) file.length());
                pstmt.executeUpdate();            

Ответы [ 4 ]

1 голос
/ 07 марта 2013

java.lang.AbstractMethodError: com.mysql.jdbc.ServerPreparedStatement.setBinaryStream (ILjava / io / InputStream; J) V

Чтобы исправить эту проблему, необходимо изменить вызов setBinaryStream, чтобы последний параметрпередается как целое число вместо длинного.


Я нашел цитату в блоге во время столкновения с той же проблемой

, как и в предыдущем случае PreparedStatement.setBinaryStream () имеет ТРИ метода перегрузки

и мы должны использовать setBinaryStream (columnIndex, InputStream, (((((((((INT)))))))

OTHERWISE, что может вызвать ошибку

1 голос
/ 08 мая 2015

Я также столкнулся с этой проблемой в работающем коде, а затем неожиданно получил эту ошибку.

Я запускаю Netbeans 8.0.2 со Glassfish 3 В папке GlassFish \ Glassfish \ libs у меня было 2 файла ojdbcojdbc6.jar и ojdbc14.jar Кажется, что хотя ojdbc6 был включен в библиотеки проекта, в него также была загружена ojdbc14.

Я остановил glassfish, переименованный в ojdbc14.jar в ojdbc14.jar.bak, затем очистил, собрал и развернулпроект.

Проблема устранена.

0 голосов
/ 04 мая 2016

Использовать java.sql.PreparedStatement.setBinaryStream (int parameterIndex, InputStream x) - 2 параметра, а не 3.

0 голосов
/ 12 апреля 2011

Я решаю свою проблему одним из предыдущих предложений:

public String insertBineryToDB(long N_ACTIVITY_ID,int N_CATEGORY,long  N_NODE_ID ,FileInputStream fis , java.io.File file) {
    Statement statement;
    try {
        //conn.close();
       // N_ACTIVITY_ID, V_NAME,N_SIZE, D_MODIFY,N_CATEGORY, N_NODE_ID ,O_OBJECT
        PreparedStatement pstmt = 
                              conn.prepareStatement("INSERT INTO PM_OBJECT_TABLE( " +
                              "N_ACTIVITY_ID, V_NAME,N_SIZE, D_MODIFY,N_CATEGORY, N_NODE_ID ,O_OBJECT) " +
                              " VALUES ( ? , ? , ? , ? , ? , ? ,empty_blob())");



InputStream bodyIn = fis;

                pstmt.setLong(1, N_ACTIVITY_ID);
                pstmt.setString(2, file.getName());
                pstmt.setLong(3, file.length());
                java.util.Date date = new java.util.Date(); 
                java.sql.Date sqlDate = new java.sql.Date(date.getTime()); 
                pstmt.setDate(4,sqlDate);
                pstmt.setInt(5, N_CATEGORY);
                pstmt.setLong(6, N_NODE_ID);
                //pstmt.setBinaryStream(7, bodyIn,(int) file.length());
                pstmt.executeUpdate();
                conn.commit();

    PreparedStatement stmt2 = conn.prepareStatement(" select O_OBJECT from PM_OBJECT_TABLE where N_ACTIVITY_ID = ? for update ");
    stmt2.setLong(1, N_ACTIVITY_ID);
    ResultSet rset = stmt2.executeQuery();

    FileInputStream inputFileInputStream    = new FileInputStream(file);
    rset.next();
    BLOB  image = ((OracleResultSet) rset).getBLOB("O_OBJECT");

    int bufferSize;
    byte[]  byteBuffer;
    int bytesRead = 0;
    int bytesWritten = 0;
    int totBytesRead = 0;
    int totBytesWritten = 0;

    bufferSize = image.getBufferSize();
    byteBuffer = new byte[bufferSize];

    OutputStream blobOutputStream = image.getBinaryOutputStream();

    while ((bytesRead = inputFileInputStream.read(byteBuffer)) != -1) {
      // After reading a buffer from the binary file, write the contents
      // of the buffer to the output stream using the write()
      // method.
        blobOutputStream.write(byteBuffer, 0, bytesRead);
        totBytesRead += bytesRead;
        totBytesWritten += bytesRead;
    }
  inputFileInputStream.close();
  blobOutputStream.close();

  conn.commit();
  rset.close();
  stmt2.close();

 String output =  "Wrote file " + file.getName() + " to BLOB column." +
                  totBytesRead + " bytes read." +
                  totBytesWritten + " bytes written.\n";
    return output;
} catch (Exception e) {
    e.printStackTrace();
    return "Wrote file " + file.getName() + " to BLOB column failed." ;
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...