Servlets 在单个页面中显示多个blob图像
您好,我正在使用servlet从oracle数据库读取BLOB图像,并将其显示在html页面中 我的示例代码是Servlets 在单个页面中显示多个blob图像,servlets,oracle-sqldeveloper,Servlets,Oracle Sqldeveloper,您好,我正在使用servlet从oracle数据库读取BLOB图像,并将其显示在html页面中 我的示例代码是 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub Connection conn = null;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String driver = "oracle.jdbc.driver.OracleDriver";
final String url = "jdbc:oracle:thin:@//157.227.32.153:1521/DNADB5";
final String username = "flex_user";
final String password = "flex_user";
int id=Integer.parseInt(request.getParameter("id"));
String query = "SELECT img_id,MP_ID , icon FROM Account_images where MP_ID=" +id;
ServletOutputStream out = response.getOutputStream();
try {
System.out.println("Getting connection");
Class.forName(driver);
conn = DriverManager.getConnection(url, username, password);
stmt = conn.createStatement();
rs = stmt.executeQuery(query);
response.setContentType("text/html");
if (rs.next()) {
InputStream in = rs.getBinaryStream("icon");
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
int len=0;
while ((len=in.read(buffer)) != -1) {
// System.out.println("writing " + length + " bytes");
out.write(buffer, 0, len);
}
System.out.println("writed.");
in.close();
out.flush();
}
使用此代码,我可以显示单个图像,但我需要显示具有相同MP_ID的所有图像。
有人能帮我吗
提前感谢。尝试使用“while”而不是“if”。(“if”不是循环。)
类似于
try {
System.out.println("Getting connection");
Class.forName(driver);
conn = DriverManager.getConnection(url, username, password);
stmt = conn.createStatement();
rs = stmt.executeQuery(query);
response.setContentType("text/html");
/*if (rs.next()) { */ // INCORRECT
if(!rs.isBeforeFirst()){
/* NO DATA */
} else {
/* YOU HAVE DATA */
while(rs.next()){
InputStream in = rs.getBinaryStream("icon");
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
int len=0;
while ((len=in.read(buffer)) != -1) {
// System.out.println("writing " + length + " bytes");
out.write(buffer, 0, len);
}
System.out.println("writed.");
in.close();
out.flush();
}
这将遍历结果集中的所有结果,而不仅仅是第一个。要调试这一点,我建议在执行查询后放置:rs.last()然后是rs.getRow(),以检查您有多少行。另外,注释掉io并输入一些println,看看上面的if-else是否正在遍历您的数据集。这与您的问题无关,但我会将“response.setContentType(“text/html”);”移出try并放在顶部的某个位置。此外,签出是一种比将id放入上述查询中更安全的选择。