Java 从数据库检索图像时,所有行中仅显示第一个图像
当我从数据库中检索图像时,仅第一个图像 插入的内容将显示在所有行中, 未检索到第二和第三个图像, 我还附上了屏幕截图以供参考。 当我检查数据库时,所有图像都已成功插入Java 从数据库检索图像时,所有行中仅显示第一个图像,java,Java,当我从数据库中检索图像时,仅第一个图像 插入的内容将显示在所有行中, 未检索到第二和第三个图像, 我还附上了屏幕截图以供参考。 当我检查数据库时,所有图像都已成功插入 package form; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.sql.Blob; import java.sql.Clob; import java.sql.Con
package form;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Blob;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
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 javax.servlet.annotation.MultipartConfig;
/**
* Servlet implementation class emp
*/
@WebServlet("/emp")
@MultipartConfig(maxFileSize = 16177215)
public class emp extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public emp() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see Servlet#getServletConfig()
*/
//public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
//return null;
//}
/**
* @see Servlet#getServletInfo()
*/
//public String getServletInfo() {
// TODO Auto-generated method stub
//return null;
//}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// response.getWriter().append("Served at: ").append(request.getContextPath());
String id=request.getParameter("id");
String firstname=request.getParameter("fname");
String lastname=request.getParameter("lname");
String date=request.getParameter("ddate");
//String imagename=request.getParameter("myfile");
InputStream input=null;
Part load=request.getPart("myfile");
input=load.getInputStream();
//InputStream fileupload= null;
//Part doc=request.getPart("mydoc");
//fileupload=doc.getInputStream();
//byte[] file=new byte[fileupload.available()];
//fileupload.read(file);
try {
Class.forName("com.mysql.jdbc.Driver");
Connection y=DriverManager.getConnection("jdbc:mysql://localhost:3306/fileupload","root","password");
PreparedStatement x=y.prepareCall("insert into empimage values(?,?,?,?,?)");
x.setString(1, id);
x.setString(2,firstname);
x.setString(3,lastname);
x.setString(4,date);
x.setBlob(5,input);
//x.setString(5,imagename);
//x.setBytes(5,file);
x.executeUpdate();
System.out.println("Date inserted");
request.getRequestDispatcher("new.html").include(request, response);
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
New.html
这是我的html代码
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body><form action="emp" method="post" enctype="multipart/form-data" accept-charset="UTF-8">
Employee ID: <br>
<input type="text" size="20" name="id">
<br>
Employee First Name : <br>
<input type="text" size="20" name="fname">
<br>
Employee Last Name :<br>
<input type="text" name="lname"><br>
Date of Birth :<br>
<input type="date" name="ddate"><br>
Image Upload:<br>
<input type="file" name="myfile"><br>
<script>
function myfunction()
{
var x=document. getElementById("myfile")
}
</script>
<input type="submit" value="Submit">
<iframe name="ifs" src="display" style="width:550px; height:300px" > </iframe>
</form>
</body>
</html>
}
Display.java
这是我的显示代码,用于显示数据库中插入的所有信息
package form;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mysql.jdbc.Blob;
/**
* Servlet implementation class display
*/
@WebServlet("/display")
public class display extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public display() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
PrintWriter out=response.getWriter();
//ServletOutputStream out = response.getOutputStream();
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/fileupload","root","password");
PreparedStatement pre=con.prepareCall("select id,firstname,lastname,DOB from fileupload.empimage");
//select * from fileupload.empimage
ResultSet rs=pre.executeQuery();
out.println("<html>");
out.println("<head>");
//out.println("<title> Display Data </title>");
/*out.println("<style>");
out.println("<table>");
{
out.println("<table font-family:arial,sans-serif;>");
out.println("<table border-collapse:collapse;>");
out.println("<table width:100%;>");
}
out.println("<td><tr>");
{
out.println("<td,th border:1px solid #dddddd;>");
out.println("<td,th text-align: left;>");
out.println("<td,th padding: 8px;>");
}
out.println("</style>");*/
out.println("</head>");
out.println("<body>");
out.println("<table style=width:100%;height:auto;>");
out.println("<tr><th>id</th><th>fname</th><th>lname</th><th>date</th><th align='center'> image </th></tr>");
while(rs.next())
{
out.println("<tr>");
int id=rs.getInt(1);
out.println("<td>" + id + "</td>" );
out.println("<td>" + rs.getString(2) + "</td>" );
out.println("<td>" + rs.getString(3) + "</td>");
out.println("<td>" + rs.getString(4) + "</td>");
out.println("<td style='width:150px; height:125px;'><img src="+ "retrieve?"+ id +" style='width:150px;height:125px;'</td>");
out.println("</tr>");
}
// o.write(imgdata);
//o.flush();
//o.close();
out.println("</table>");
out.println("</body>");
out.println("</html>");
}
catch (ClassNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
如果您是从Display类调用doget()方法,并且您的代码如下所示,那么请猜一猜:
<img src="+ "retrieve?"+ id +" style='width:150px;height:125px;'</td>");
”;
因此,这里您已经将参数id传递给retrieve api,但在retrieve.java类中未使用该参数
简而言之,您需要将查询更新为
select image from fileupload.empimage where id=<the parameter>
从fileupload.empimage中选择图像,其中id=
希望这篇文章能帮助您在您的检索器中,您应该使用HTTP请求中的
id
参数:
String query = "select image from fileupload.empimage where id = ?";
PreparedStatement pre = con.prepareCall(query);
pre.setString(1,request.getParameter("id"));
ResultSet rs = pre.executeQuery();
当我使用“id”检索图像时,正如上面的代码所述,您已经声明了String id=request.getQueryString();out.println(“query String”+id);//getQueryString抛出空值,即使我尝试了“GET”方法,它也没有成功,请建议任何解决方法
String query = "select image from fileupload.empimage where id = ?";
PreparedStatement pre = con.prepareCall(query);
pre.setString(1,request.getParameter("id"));
ResultSet rs = pre.executeQuery();