【问题标题】:How to resolve ORA-01460 Error?如何解决 ORA-01460 错误?
【发布时间】:2014-07-11 00:31:46
【问题描述】:

我正在将照片上传到 oracle 数据库。我的 AddPhotoServlet 类的代码如下。

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class AddPhotoServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {
        // Apache Commons-Fileupload library classes
        DiskFileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload sfu  = new ServletFileUpload(factory);

        /*if (! ServletFileUpload.isMultipartContent(request)) {
            System.out.println("sorry. No file uploaded");
            return;
        }*/

        // parse request
        List items = sfu.parseRequest(request);
        FileItem  id = (FileItem) items.get(0);
        String photoid =  id.getString();

        FileItem title = (FileItem) items.get(1);
        String   phototitle =  title.getString();

        // get uploaded file
        FileItem file = (FileItem) items.get(2);

        // Connect to Oracle
        Class.forName("oracle.jdbc.driver.OracleDriver");
        Connection con =DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "cloud", "cloud");
        con.setAutoCommit(false);

        PreparedStatement ps = con.prepareStatement("insert into photos values(?,?,?)");
        ps.setString(1, photoid);
        ps.setString(2, phototitle);
        // size must be converted to int otherwise it results in error
        ps.setBinaryStream(3, file.getInputStream(), (int) file.getSize());
        ps.executeUpdate();
        con.commit();
        con.close();
        out.println("Proto Added Successfully. <p> <a href='listphotos'>List Photos </a>");
    }

当我在上传时在服务器中运行 html 页面时会引发错误: ORA-01460: 请求的转换未实现或不合理。 谁能帮我解决这个问题?

我已将我的表创建为:

create table photos
(
id number(5) primary key,
title varchar2(50),
photo blob
);

【问题讨论】:

  • 在这篇文章中:stackoverflow.com/questions/14194165/… 建议(在 cmets 中)更新到最新版本的 Oracle jdbc 驱动程序。你试过吗?
  • @DanielBarbarian 不,我没有尝试过,但我现在肯定会这样做。

标签: oracle servlets jdbc


【解决方案1】:

查看 oracle jdbc 开发人员指南,了解如何使用 streamslobs。关于如何处理具有不同性能/内存影响的数据,有很多选项。 第二个文档的一部分(关于 lob)介绍了临时 lob 对象的使用,方法是使用 Connection.createBlob() 并将内容写入该对象,然后在语句中设置该 blob 对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 2015-03-15
    • 2016-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多