Java 在servlet和jsp中从数据库检索bytearray
我真的不理解字节数组…可能是因为我第一次处理图像,所以需要您的帮助 我有base64字符串R0LGodlhdwapakecaaaaAaAaAaAaAaAaAaAaAzm/////waaacwaaAaAaAaAaAaAaAaCiispeqhsrz5Modrlln48cxf8m2iq3ymmkqvlrtw4mlwwach H09wdgltaxplzcbiesbvbhzcbtbwfydfyndmvyiqaw== 我对其进行解码并将其存储在MySql数据库中,然后在servlet端使用以下代码Java 在servlet和jsp中从数据库检索bytearray,java,image,jsp,jakarta-ee,Java,Image,Jsp,Jakarta Ee,我真的不理解字节数组…可能是因为我第一次处理图像,所以需要您的帮助 我有base64字符串R0LGodlhdwapakecaaaaAaAaAaAaAaAaAaAaAzm/////waaacwaaAaAaAaAaAaAaAaCiispeqhsrz5Modrlln48cxf8m2iq3ymmkqvlrtw4mlwwach H09wdgltaxplzcbiesbvbhzcbtbwfydfyndmvyiqaw== 我对其进行解码并将其存储在MySql数据库中,然后在servlet端使用以下代码 if (
if ( request.getParameter("imgID") != null )
{
iNumPhoto = Integer.parseInt(request.getParameter("imgID")) ;
try
{
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn=DriverManager.getConnection("jdbc:mysql://localhost:9191/mbcss","root","admin");
stmt= conn.createStatement();
//conn.setAutoCommit (false);
// get the image from the database
byte[] imgData = GetPhoto.getPhoto( conn, iNumPhoto );
System.out.println("imgData="+imgData);
// display the image
response.setContentType("image/gif");
OutputStream o = response.getOutputStream();
o.write(imgData);
o.flush();
o.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
下面是getPhoto方法
public static byte[] getPhoto (Connection conn, int iNumPhoto)
throws Exception, SQLException
{
String req = "" ;
Blob img ;
byte[] imgData = null ;
Statement stmt = conn.createStatement ();
// Query
req = "Select image From visit";
ResultSet rset = stmt.executeQuery ( req );
while (rset.next ())
{
img = rset.getBlob(1);
imgData = img.getBytes(1,(int)img.length());
}
rset.close();
stmt.close();
return imgData ;
}
visit表只有一条记录,但每当我执行调用servlet类imgData的jsp文件时,就会在每次刷新时打印不同的值,并且图像也不会显示在jsp上
您需要检查以下各项:
您可以在以下位置查看更多信息:您将从blob数据库中看到记录中的最后一个图像文件,因为byat数组会清除每个新记录,并将新图像文件替换到jsp页面中的固定位置。您需要将文件写入本地目录,并且需要提供该位置的路径。您需要确保正确解码Base64编码图像,并确保将图像添加到数据库的代码没有问题 执行相反的过程:
(1) 从数据库检索字节数组图像表示形式
(2) 对字节数组执行Base64编码
(3) 从Base64编码的字节数组创建字符串
通过此操作获得的字符串必须与原始字符串具有相同的值: R0lGODlhDwAPAKECAAAAzMzM///waaacwaaaadwapaaaciispeqhsrz5modrlln48cxf8m2iq3ymmkqvlrtw4mlwach h09wdgltaxplzcbiesbvgvhzcbtbwfydfnhdmvyiqaow==
如果是这样,那么您就知道您正确地执行了解码和数据库存储;否则,如果值不同,您需要修复解码或数据库存储代码。我已经提到,只有一行,因为我也使用where子句进行了测试,但随后删除了除1行之外的所有行进行测试。因此,只有一行,数据类型为BLOBi。visit table中没有主键。您能告诉我在上述文档中应该做什么吗现在我应该做什么更改您必须创建一个PK,如果您不想使用它们,您可以使用自动增量功能创建一个列“id”。如果您的数据在生产环境中,您可以使用PK创建一个临时表,然后从旧表加载数据,最后对表进行重命名。解码图像可能是图像无法正确显示在JSP中的原因。尝试将图像数据直接存储到db中,而不进行解码。@Ravindra Gullapalli您的意思是说我应该只将图像存储为base64字符串…这对我来说太低效了..首先我的数据库中只有一条记录..其次我尝试了fileoutputstream先将图像保存到驱动器..创建了一些9字节的文件,但不是其中的图像