Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试将图像插入数据库获取ORA-01460:未实现或请求的转换不合理错误_Java_Database_Image_Jsp_Insert - Fatal编程技术网

Java 尝试将图像插入数据库获取ORA-01460:未实现或请求的转换不合理错误

Java 尝试将图像插入数据库获取ORA-01460:未实现或请求的转换不合理错误,java,database,image,jsp,insert,Java,Database,Image,Jsp,Insert,我正在尝试向数据库中插入一个具有自动递增照片id的图像 我的表格列是: PHOTO_ID (primary key), USERNAME (fkey), PICTURE, PICTURE_TITLE, LIKES 我的代码是 public class UploadPhotoDao { public int insertPhoto(UploadPhotoBean uploadBean){ Connection con = null; Prepared

我正在尝试向数据库中插入一个具有自动递增照片id的图像

我的表格列是:

PHOTO_ID  (primary key),
USERNAME  (fkey),
PICTURE,
PICTURE_TITLE,
LIKES 
我的代码是

public class UploadPhotoDao {
    public int insertPhoto(UploadPhotoBean uploadBean){
        Connection con = null;
        PreparedStatement ps = null;

        int index = 0;
        final String query = "INSERT INTO PHOTOS_DETAILS (PHOTO_ID,USERNAME,PICTURE,PICTURE_TITLE,LIKES) VALUES (PHOTO_ID_SEQUENCE.nextval,?,?,?,?)";
            try {
                con = ConnectionUtil.getConnection();
                ps = con.prepareStatement(query);


                ps.setString(1, uploadBean.getUsername());
                File file =new File(uploadBean.getPicture());
                FileInputStream fis = new FileInputStream(file);
                ps.setBinaryStream(2, fis, fis.available());
                ps.setString(3, uploadBean.getPictureTitle());
                ps.setInt(4, new Integer(0));
                index = ps.executeUpdate();

            }
            catch (SQLException e) {
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
            finally {
                    ConnectionUtil.closeQuitly(ps);
                    ConnectionUtil.closeQuitly(con);
            }
            return index;
    }
}
我得到了一个错误:

java.sql.SQLException: ORA-01460: unimplemented or unreasonable conversion requested InputStream.available不返回Javadocs中明确记录的流大小

您需要查询文件的大小,而不是inputstream中的可用字节:

ps.setBinaryStream(2, fis, (int)file.length());
根据JDBC驱动程序的版本,您也可以使用

ps.setBinaryStream(2, fis, file.length());

但是setBinaryStreamint,InputStream,long是在JDBC4.0中定义的,因此并不是由所有驱动程序版本实现的。如果我没有弄错的话,setBinaryStreamint,InputStream,int是JDBC 2.0,应该在所有版本中都可用。

即使我更改为ps.setBinaryStream2,fis,intfile.length,也会出现相同的错误;请检查我的查询…是否有任何错误???我在db表中将图片列定义为BLOB。我用一个序列自动递增照片id列…@user1900771:对不起,那我就没有任何想法了我…我解决了这个问题…这只是驱动程序问题..将ojdbc14.jar更改为最新版本。如果省略BLOB列,insert语句有效吗?如果为BLOB列提供NULL是否有效?解决了此问题..只是一个ojdbc14.jar文件问题…需要获取最新版本。就这样