0

我不知道为什么我选择在我的 JSP 项目中使用 SQLite 数据库。我在我的 Tiny Core Linux 上配置 MySQL 驱动程序时遇到了问题,当我使用 eclipse 在 Windows 上运行我的 JSP 项目时,我遇到了更多问题。在 Windows 上存在很多文件权限问题。

所以我选择在 Tiny Core Linux 上使用 SQLite。让我的 Tiny Core Linux 作为 Windows 机器上的服务器,并通过它使用端口转发在 localhost:9000 为我的项目提供服务。

现在我遇到的问题是 - “如何通过 JSP 表单在数据库中插入图像?”

我正在使用来自 commons.apache.org 的通用文件上传 jar 文件。当我在 Windows 和 MySQL DB 上使用它时,代码看起来像这样:

if (servletFileUpload.isMultipartContent(request)){

try {
 //DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();     
diskFileItemFactory.setSizeThreshold(10 * 1024 * 1024); //10 MB
List items = null;
items = servletFileUpload.parseRequest(request);
Iterator itr = items.iterator();
while (itr.hasNext()) {
    System.out.println("inside while");
    FileItem item = (FileItem) itr.next();
    if (item.isFormField()) {
        System.out.println("inside if");
        System.out.println("File Name = " + item.getFieldName() + ", Value = " + item.getString());
        if(item.getFieldName().equals("title")){
            title=item.getString();
        }
        // Getting other form field items.
    } else {
        System.out.println("inside else");
        System.out.println("Field Name = " + item.getFieldName()
                + ", File Name = " + item.getName()
                + ", Content type = " + item.getContentType()
                + ", File Size = " + item.getSize());
        File file = new File(repositoryPath, storename);
        item.write(file);
    }
}
out.println("File uploaded successfully");

} catch (Exception e) {
System.out.println("Error from upload file report " + e);
}
try{
    Class.forName(driver).newInstance();
    con = DriverManager.getConnection(url+dbName, dbUserName, dbUserPassword);
    System.out.println("Connected to DB");
    Statement st = con.createStatement();
    String strQuery = null;
    strQuery = "INSERT INTO movies (title, photo, description, seats, from, to, flag, timings) values (?,?,?,?,?,?,?,?)";
            PreparedStatement statement = con.prepareStatement(strQuery);
    statement.setString(1, title);
        //
          // Not able to figure out what to do for BLOB field - photo.
    //
        statement.setString(3, description);
    statement.setInt(4, seats);
    statement.setDate(5, new java.sql.Date(format.parse(sd).getTime()));
    statement.setDate(6, new java.sql.Date(format.parse(ed).getTime()));
    statement.setInt(7, display);
    statement.setString(8, timings);

    int row = statement.executeUpdate();
    if(row>0){
        message = "Movie added successfully";
        System.out.println(message);
    }   
}
catch(Exception e){
    e.printStackTrace();
}

我在 enctype="multipart/formdata" 中上传我的文件。上面的代码管理得很好。所有其他条件均已设置。

我如何在 SQLite DB 上使用上面的代码?

PS已经为 SQLite 处理了变量 url、dbName、dbUserName 和 dbUserPassword。

4

1 回答 1

0

您需要获取文件的数据,并为“照片”参数使用某种二进制参数/参数,例如 setBytes 或 setBlob(尽管您需要弄清楚如何实例化 blob)或 setBinaryStream。(提示:FileInputStream 与 setBinaryStream 配合得很好)

正如评论所说,强烈建议您在 servlet 方面执行此操作(如果您遵循 MVC 模式,则为您的“控制器”)。JSP 主要用于表示逻辑。

于 2013-05-17T13:07:47.970 回答