พื้นหลัง! jsp+mysql อย่าลืมใช้ประเภท longblob ของ mysql เพื่อจัดเก็บฟิลด์ฐานข้อมูล ขนาดหยดเริ่มต้นไม่เพียงพอ
: id (char) pic (longblob)
โปรดระบุแหล่งที่มาสำหรับการพิมพ์ซ้ำ ในเวลานี้ ฉันร่วมมือกับคนสนิทของฉัน
ดำเนินการ blob ดั้งเดิมให้เสร็จสิ้น
เมื่อฟิลด์คุณต้องมีค่าว่าง ตรวจสอบ BLOB ซึ่งยุ่งยากมากในการใช้
หน้า
PEPAREPARESTATATATATATATATATATATATATATATATATATATATATATATORESTATATATATORESTATOMEMEML
" http://www.w3 org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">testblob.jsp
<%@ หน้า contentType="text/html;charset=gb2312"%>
<%@ หน้านำเข้า = "java.sql.*" %>
<%@ เพจ import="java.util.*"%>
<%@ หน้านำเข้า = "java.text.*"%>
<%@ เพจนำเข้า = "java.io.*"%>
<html xmlns=" http://www.w3.org/1999/xhtml ">
<หัว>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>เอกสารที่ไม่มีชื่อ</title>
</หัว>
<ร่างกาย>
-
สตริง id=request.getParameter("id");
ไฟล์สตริง=request.getParameter("ไฟล์");
ออกพิมพ์(id);
out.print (ไฟล์);
FileInputStream str=ใหม่ FileInputStream(ไฟล์);
out.print(str.available());
java.sql.การเชื่อมต่อการเชื่อมต่อ;
java.lang.String strConn;
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
conn= java.sql.DriverManager.getConnection("jdbc:mysql://localhost/test","root","");
String sql="ใส่ค่า test(id,pic)(?,?)";
ReadyStatement pstmt=conn.prepareStatement(sql);
pstmt.setString(1,id);
pstmt.setBinaryStream(2,str,str.available());
pstmt.execute();
out.println("สำเร็จ,คุณได้แทรกรูปภาพเรียบร้อยแล้ว");
pstmt.ปิด();
-
<a href="readblob.jsp">ดูภาพ</a>
<a href="postblob.html">กลับมา</a>
</ร่างกาย>
</html>
************************************************ **********
readblob.jsp
<%@ หน้า contentType="text/html;charset=gb2312"%>
<%@ หน้านำเข้า = "java.sql.*, javax.sql.*" %>
<%@ เพจ import="java.util.*"%>
<%@ หน้านำเข้า = "java.text.*"%>
<%@ เพจนำเข้า = "java.io.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns=" http://www.w3.org/1999/xhtml ">
<หัว>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>เอกสารที่ไม่มีชื่อ</title>
</หัว>
<ร่างกาย>
-
java.sql.การเชื่อมต่อการเชื่อมต่อ;
ResultSet rs=null;
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
conn= java.sql.DriverManager.getConnection("jdbc:mysql://localhost/test","root","");
คำสั่ง stmt=conn.createStatement();
rs=stmt.executeQuery("เลือก * จากการทดสอบโดยที่ id='1'");
ถ้า(rs.ถัดไป())
-
หยด b = rs.getBlob("รูป");
ขนาด int =(int)b.length();
ออกพิมพ์(ขนาด);
InputStream ใน=b.getBinaryStream();
ไบต์ [] โดย = ไบต์ใหม่ [ขนาด];
response.setContentType("รูปภาพ/jpeg");
ServletOutputStream sos = response.getOutputStream();
int ไบต์อ่าน = 0;
ในขณะที่ ((bytesRead = in.read(by)) != -1) {
sos.write (โดย, 0, bytesRead);
-
ใน.ปิด();
sos.ฟลัช();
-
-
</ร่างกาย>
</html>
************************************************** * ******************
หมายเหตุ: เมื่อใช้ sos.write(by, 0, bytesRead); เมธอดนี้จะส่งออกเนื้อหาในอินพุตสตรีมในหน้าใหม่
หากมี เป็นเนื้อหาอื่นที่จะส่งออกในหน้านี้คุณสามารถเปลี่ยนวิธีการข้างต้นเป็น bytesRead = in.read(by));
จากนั้นใช้วิธี out.print(new String(by)) เพื่อส่งออกผลลัพธ์ ข้อควรสนใจที่นี่ ไม่สามารถใช้เมธอด by.toString() ได้ วิธีนี้จะส่งคืนที่อยู่หน่วยความจำของเนื้อหาที่จะส่งออก มีพื้นที่ข้อความแบบหยดใน mysql ขนาดคือ 66536 โดยพื้นฐานแล้วใส่ของเล็กๆ น้อยๆ ก็พอแล้ว 555 แต่ตอนนี้ภาพดิจิทัลเริ่มใหญ่ขึ้นเรื่อยๆ คุณสามารถใช้ขนาด longblob ได้เท่านั้น พอจะเล่นหนังได้ ฮ่าๆ