通过JSP表单在SQLite数据库中插入图像

时间:2013-05-17 06:40:32

标签: sqlite jsp

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

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

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

我正在使用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。

1 个答案:

答案 0 :(得分:0)

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

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