Java JSP上传图片至MySQL并显示

4星 · 超过85%的资源 需积分: 18 35 下载量 198 浏览量 更新于2024-09-15 收藏 36KB DOC 举报
"使用JSP上传照片到MySQL数据库并查询显示的方法" 在Web开发中,有时我们需要将用户上传的照片存储到数据库中,以便后续查询和展示。本资源主要探讨了如何使用Java Servlet和JSP(JavaServer Pages)配合MySQL数据库来实现这一功能,特别是针对大容量的二进制文件如照片的存储。 首先,MySQL数据库中存储大容量二进制文件,如照片,通常选择的字段类型是`BLOB`(Binary Large Object),其中`LONGBLOB`用于存储非常大的二进制数据。以下是一个创建名为`images`的表的例子: ```sql CREATE TABLE `abc`.`images` ( `name` VARCHAR(10) NOT NULL, `changdu` INT(10) UNSIGNED NOT NULL, `content` LONGBLOB NOT NULL, PRIMARY KEY (`name`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8; ``` 这个表包含三个字段:`name`(照片名称)、`changdu`(照片长度)和`content`(照片内容,即二进制数据)。 接下来,要将照片存储到数据库,你需要将上传的文件转换为二进制流。在Java代码中,你可以使用`FileInputStream`读取文件,然后通过`PreparedStatement`的`setBinaryStream`方法将二进制流设置为SQL语句的参数。以下是一个简单的示例: ```java File file = new File("c:\\blog.jpg"); InputStream photoStream = new FileInputStream(file); String sql = "INSERT INTO imgtable (img) VALUES (?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setBinaryStream(1, photoStream, (int) file.length()); pstmt.executeUpdate(); ``` 这段代码首先创建一个`FileInputStream`对象来读取文件,然后定义一个SQL插入语句,并使用`PreparedStatement`设置二进制流作为值。最后执行更新操作将照片数据保存到数据库。 查询并显示存储在数据库中的照片时,可以使用`ResultSet`和`ResultSetMetaData`来获取数据,然后通过`Blob`对象获取二进制数据,再将其写入到响应流中供客户端下载或显示。例如: ```java ResultSet rs = stmt.executeQuery("SELECT * FROM images WHERE name='example'"); if (rs.next()) { Blob blob = rs.getBlob("content"); byte[] imageBytes = blob.getBytes(1, (int) blob.length()); // 将imageBytes写入到响应流中 } ``` 这个过程涉及到文件上传、二进制数据处理、数据库操作以及JSP页面展示等多个环节,需要对Java、SQL以及Web开发有深入理解。通过以上步骤,你可以在JSP应用中实现照片的上传、存储和查询显示功能。