import java.sql.*; import java.io.*; import oracle.sql.*; public class WriteBlob { public static void main(String[] args) { try { DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","fankai","fankai"); conn.setAutoCommit(false); BLOB blob = null; PreparedStatement pstmt = conn.prepareStatement("insert into javatest(name,content) values(?,empty_blob())"); pstmt.setString(1,"fankai"); pstmt.executeUpdate(); pstmt.close(); pstmt = conn.prepareStatement("select content from javatest where name= ? for update"); pstmt.setString(1,"fankai"); ResultSet rset = pstmt.executeQuery(); if (rset.next()) blob = (BLOB) rset.getBlob(1); String fileName = "oraclejdbc.jar"; File f = new File(fileName); FileInputStream fin = new FileInputStream(f); System.out.println("file size = " + fin.available()); pstmt = conn.prepareStatement("update javatest set content=? where name=?"); OutputStream out = blob.getBinaryOutputStream(); int count = -1, total = 0; byte[] data = new byte[(int)fin.available()]; fin.read(data); out.write(data); /* byte[] data = new byte[blob.getBufferSize()]; 另一U实现方?节省内存 while ((count = fin.read(data)) != -1) { total += count; out.write(data, 0, count); } */ fin.close(); out.close(); pstmt.setBlob(1,blob); pstmt.setString(2,"fankai"); pstmt.executeUpdate(); pstmt.close(); conn.commit(); conn.close(); } catch (SQLException e) { System.err.println(e.getMessage()); e.printStackTrace(); } catch (IOException e) { System.err.println(e.getMessage()); } } } |
into javatest(name,content) values(?,empty_blob()); |
select content from javatest where name= ? for update; |
java.sql.Blob oracle.sql.BLOB |
package com.fankai; import java.sql.Blob; public class Cat { private String id; private String name; private char sex; private float weight; private Blob image; public Cat() { } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public char getSex() { return sex; } public void setSex(char sex) { this.sex = sex; } public float getWeight() { return weight; } public void setWeight(float weight) { this.weight = weight; } public Blob getImage() { return image; } public void setImage(Blob image) { this.image = image;} } |
Q?xml version="1.0"?Q?BR>Q?DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"Q?BR> Qhibernate-mappingQ?BR>Qclass name="com.fankai.Cat" table="cat"Q?BR>Q?--jcs-cache usage="read-only"/--Q?BR>Qid name="id" unsaved-value="null"Q?BR>Qgenerator class="uuid.hex"/Q?BR>Q?idQ?BR>Qproperty name="name" length="16" not-null="true"/Q?BR>Qproperty name="sex" length="1" not-null="true"/Q?BR>Qproperty name="weight" /Q?BR>Qproperty name="image" /Q?BR>Q?classQ?BR>Q?hibernate-mappingQ?/TD> |
package com.fankai; import java.sql.Blob; import net.sf.hibernate.*; import oracle.sql.*; import java.io.*; public class TestCatHibernate { public static void testBlob() { Session s = null; byte[] buffer = new byte[1]; buffer[0] = 1; try { SessionFactory sf = HibernateSessionFactory.getSessionFactory(); s = sf.openSession(); Transaction tx = s.beginTransaction(); Cat c = new Cat(); c.setName("Robbin"); c.setImage(Hibernate.createBlob(buffer)); s.save(c); s.flush(); s.refresh(c, LockMode.UPGRADE); BLOB blob = (BLOB) c.getImage(); OutputStream out = blob.getBinaryOutputStream(); String fileName = "oraclejdbc.jar"; File f = new File(fileName); FileInputStream fin = new FileInputStream(f); int count = -1, total = 0; byte[] data = new byte[(int)fin.available()]; fin.read(data); out.write(data); fin.close(); out.close(); s.flush(); tx.commit(); } catch (Exception e) { System.out.println(e.getMessage()); } finally { if (s != null) try { s.close(); } catch (Exception e) {} } } } |
Qhost id='yourweb:8080' app-dir='e:\blog\' class-update-interval='2'Q?BR>Qweb-app id='/'Q?BR>Qdirectory-servlet id='false'/Q? Q?web-appQ?BR>Qerror-log id='log/web-error.log'/Q? QhostQ?/TD> |
Q?xml version="1.0" encoding="ISO-8859-1"?Q? Q?DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"Q?BR> Qweb-appQ?BR> QservletQ?BR>Qservlet-nameQactionQ?servlet-nameQ?BR>Qservlet-classQorg.apache.struts.action.ActionServletQ?servlet-classQ?BR>Qinit-paramQ?BR>Qparam-nameQconfigQ?param-nameQ?BR>Qparam-valueQ?WEB-INF/struts-config.xmlQ?param-valueQ?BR>Q?init-paramQ?BR>Qinit-paramQ?BR>Qparam-nameQdebugQ?param-nameQ?BR>Qparam-valueQ?Q?param-valueQ?BR>Q?init-paramQ?BR>Qinit-paramQ?BR>Qparam-nameQdetailQ?param-nameQ?BR>Qparam-valueQ?Q?param-valueQ?BR>Q?init-paramQ?BR>Qload-on-startupQ?Q?load-on-startupQ?BR>Q?servletQ?BR> Qservlet-mappingQ?BR>Qservlet-nameQactionQ?servlet-nameQ?BR>Qurl-patternQ?.doQ?url-patternQ?BR>Q?servlet-mappingQ?BR> Q?-- The Usual Welcome File List --Q?BR>Qwelcome-file-listQ?BR>Qwelcome-fileQindex.jspQ?welcome-fileQ?BR>Q?welcome-file-listQ?BR> Q?-- Struts Tag Library Descriptors --Q?BR>QtaglibQ?BR>Qtaglib-uriQ?tags/struts-beanQ?taglib-uriQ?BR>Qtaglib-locationQ?WEB-INF/struts-bean.tldQ?taglib-locationQ?BR>Q?taglibQ?BR> QtaglibQ?BR>Qtaglib-uriQ?tags/struts-htmlQ?taglib-uriQ?BR>Qtaglib-locationQ?WEB-INF/struts-html.tldQ?taglib-locationQ?BR>Q?taglibQ?BR> QtaglibQ?BR>Qtaglib-uriQ?tags/struts-logicQ?taglib-uriQ?BR>Qtaglib-locationQ?WEB-INF/struts-logic.tldQ?taglib-locationQ?BR>Q?taglibQ?BR> QtaglibQ?BR>Qtaglib-uriQ?tags/struts-nestedQ?taglib-uriQ?BR>Qtaglib-locationQ?WEB-INF/struts-nested.tldQ?taglib-locationQ?BR>Q?taglibQ?BR> QtaglibQ?BR>Qtaglib-uriQ?tags/struts-tilesQ?taglib-uriQ?BR>Qtaglib-locationQ?WEB-INF/struts-tiles.tldQ?taglib-locationQ?BR>Q?taglibQ?BR> Q?web-appQ?/TD> |
hibernate2.jar commons-beanutils.jar commons-collections.jar commons-dbcp.jar commons-lang.jar commons-logging.jar commons-pool.jar dom4j.jar cglib-asm.jar connector.jar |
Q?xml version='1.0' encoding='utf-8'?Q?BR>Q?DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd"Q? Qhibernate-configurationQ?BR>Qsession-factoryQ?BR> Qproperty name="hibernate.connection.url"Q?BR>jdbc:mysql://localhost:3306/yourdatabase Q?propertyQ?BR>Qproperty name="hibernate.connection.driver_class"Q?BR>org.gjt.mm.mysql.Driver Q?propertyQ?BR>Qproperty name="hibernate.connection.username"Q?BR>yourname Q?propertyQ?BR>Qproperty name="hibernate.connection.password"Q?BR>youyrpassword Q?propertyQ?BR> Q??- 是否运行期生成的SQL输出到日志以供调?-Q?BR>Qproperty name="show_sql"QfalseQ?propertyQ?BR> Q?--dialect Q每个数据库都有其对应的Dialet以匹配其q_Ҏ(gu)?-Q?BR>Qpropertyname="dialect"Qnet.sf.hibernate.dialect.MySQLDialectQ?propertyQ?BR>Q??- 事务理cdQ这里我们用JDBC Transaction --Q?BR>Qproperty name="transaction.factory_class"Q?BR>net.sf.hibernate.transaction.JDBCTransactionFactoryQ?propertyQ?BR> Qproperty name="jdbc.batch_size"Q?0Q?propertyQ?BR>Qproperty name="jdbc.use_scrollable_resultset"QtrueQ?propertyQ?BR> Q??映射文g配置Q注意配|文件名必须包含其相对于根的全\?-Q?BR>Qmapping resource="net/seerlog/hbm/Cat.hbm.xml"/Q?BR> Q?session-factoryQ?BR> Q?hibernate-configurationQ?/TD> |
Q?DOCTYPE project [ Q?ENTITY database SYSTEM "file:./config/database/hsqldb.xml"Q?BR>]Q?/TD> |
Qproperty name="name" value="airline"/Q? |
Qproperty name="build.gen-src.dir" value="${build.dir}/gen-src"/Q? |
Qhibernate destination="${build.gen-src.dir}" package="${name}.hibernate" genXDocletTags="false" genIntergratedCompositeKeys="false" javaTypeMapper="middlegen.plugins.hibernate.HibernateJavaTypeMapper" /Q? |
|
|