我不知道为什么我选择在我的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。
答案 0 :(得分:0)
你需要获取文件的数据,并使用某种二进制参数/参数,例如setBytes或setBlob(尽管你需要弄清楚如何实例化blob)或setBinaryStream,用于“照片”参数。 (提示:FileInputStream适用于setBinaryStream)
正如评论所说,强烈建议您在servlet端执行此操作(如果您遵循MVC模式,则为“控制器”)。 JSP主要用于表示逻辑。