java - 从数据库中检索文件数据

标签 java sql postgresql-9.4

我正在尝试使用 Java servlet 将文件数据从数据库获取到 HTML。 文件数据为二进制格式。我正在将二进制格式数据转换为字符串格式,但出现错误:

The column index is out of range: 1, number of columns: 0.

有人可以建议我哪里出错了吗?

这是我的 Java 代码:

package fileretrieve;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

import org.apache.tomcat.util.http.fileupload.IOUtils;

import dbConnection.Dbconn;

@MultipartConfig
public class FileRetrieve extends HttpServlet {



    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        String onelevel = request.getParameter("onelevel");
        String twolevel = request.getParameter("twolevel");
        String threelevel = request.getParameter("threelevel");
        String fourlevel = request.getParameter("fourlevel");
        String fivelevel = request.getParameter("fivelevel");
        String sevenlevel = request.getParameter("sevenlevel");
        String eightlevel = request.getParameter("eightlevel");


        Part filePart = request.getPart("data");


        byte[] filecontent1 = new byte[] {78,73, 67,69,70,75,80,76,68};
        String value = new String(filecontent1);
       System.out.println(value);



        Connection conn = null; // connection to the database
        String message = null;
        Statement st = null;// message will be sent back to client

        try {
            // connects to the database
              conn = Dbconn.getConnection();
              st = conn.createStatement();

            // constructs SQL statement
            String sql = "Select data from files1 where board=?,syllabus=?,class=?,chapters=?,state=?,terms=?";
            PreparedStatement statement = conn.prepareStatement(sql);
            statement.setString(1, onelevel);
            statement.setString(2, twolevel);
            statement.setString(3, threelevel);
            statement.setString(4, fourlevel);
            statement.setString(5, fivelevel);
            statement.setBytes(6, filecontent1);
            statement.setBytes(7, filecontent1);
            statement.setBytes(8, filecontent1);





           /* if (inputStream != null) {
                // fetches input stream of the upload file for the blob column
                statement.setBlob(6, inputStream);
            }
 */

//            statement.setBinaryStream(6, fis, (int)file.length());
            // sends the statement to the database server
            int row = statement.executeUpdate();

        } catch (SQLException ex) {
            message = "ERROR: " + ex.getMessage();
            ex.printStackTrace();
        } finally {
            if (conn != null) {
                // closes the database connection
                try {
                    conn.close();
                } catch (SQLException ex) {
                    ex.printStackTrace();
                }
            }
            // sets the message in request scope
            request.setAttribute("Message", message);

            // forwards to the message page
            getServletContext().getRequestDispatcher("/home.html").forward(request, response);
        }
    }
}            

数据库表:

CREATE TABLE files1
(
  board text,
  syllabus text,
  class text,
  subject text,
  chapters text,
  data bytea,
  state text,
  terms text
)

最佳答案

您有 8 个参数,但查询只有 6 个(其中部分)

关于java - 从数据库中检索文件数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46292731/

相关文章:

mysql - 如何获取一个表中暗示另一表中的行的所有行?

sql - INSTR 在 MDX 中实现 LIKE 运算符

mysql - sql没有正常执行

sql - Postgres 9.4——在向表中插入行时如何忽略重复键

java - 如何在JTable中显示某些行

java - 通过 Junit 测试禁用 Java AWS S3 客户端的调试日志记录

PostgreSQL 触发器创建问题

postgresql - 获取第一个空格后的字符串末尾

java - 输入 editText 超过 10 位时应用程序停止

java - Hibernate与不同数据库MySQL的复制