byte[] 如何转成java.sql.Blob类型

byte[] 如何转成java.sql.Blob类型
byte[] 如何转成java.sql.Blob类型
byte[] 如何转成java.sql.Blob类型
byte[] 如何转成java.sql.Blob类型
byte[] 如何转成java.sql.Blob类型

1个回答

通过 Blob 类的 setByte 设置 btye 数据。
完整参考这篇:https://blog.csdn.net/yelllowcong/article/details/78599290
这里是主要代码:

            byte [] result = file2Byte(inFile);
            //creat a new blob
            BLOB blob = BLOB.createTemporary(conn, true, BLOB.DURATION_SESSION);

            //set start is 1
            //这个setBytes 是指定起点,然后设定字节
            blob.setBytes(1, result);

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java.sql.SQLException: ORA-01002: 读取违反顺序 大家帮我看看
[code="java"] public void insertImage(Image image) { Connection conn = null; Statement stat = null; ResultSet rs = null; OutputStream out = null; try { conn = DBManager.getConnection(); stat = conn.createStatement(); byte[] data = convertImage(image); String sql1 = "INSERT INTO PHOTO(ID,NAME,IMAGE) VALUES(1,'TEST',EMPTY_BLOB())"; stat.execute(sql1); String sql2 = "SELECT IMAGE FROM PHOTO WHERE ID=1 FOR UPDATE"; rs = stat.executeQuery(sql2); if(rs.next()) { BLOB blob = (BLOB)rs.getBlob("IMAGE"); out = blob.getBinaryOutputStream(); try { out.write(data,0,data.length); } catch(IOException e) { e.printStackTrace(); } } } catch(SQLException e) { e.printStackTrace(); } finally { try { if(out != null) out.close(); if(rs != null) rs.close(); if(stat != null) stat.close(); if(conn != null) conn.close(); } catch(SQLException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } } } [/code] 程序运行到 [code="java"]rs = stat.executeQuery(sql2);[/code] 就会抛出 [code="java"] java.sql.SQLException: ORA-01002: 读取违反顺序 at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134) at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289) at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573) at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1891) at oracle.jdbc.ttc7.TTC7Protocol.fetch(TTC7Protocol.java:1198) at oracle.jdbc.driver.OracleStatement.doExecuteQuery(OracleStatement.java:2400) at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2672) at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:572) at com.computech.takepic.common.ImageDAO.insertImage(ImageDAO.java:39) at com.computech.takepic.common.TestJMF$1.actionPerformed(TestJMF.java:104) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234) at java.awt.Component.processMouseEvent(Component.java:5488) at javax.swing.JComponent.processMouseEvent(JComponent.java:3093) at java.awt.Component.processEvent(Component.java:5253) at java.awt.Container.processEvent(Container.java:1966) at java.awt.Component.dispatchEventImpl(Component.java:3955) at java.awt.Container.dispatchEventImpl(Container.java:2024) at java.awt.Component.dispatchEvent(Component.java:3803) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822) at java.awt.Container.dispatchEventImpl(Container.java:2010) at java.awt.Window.dispatchEventImpl(Window.java:1766) at java.awt.Component.dispatchEvent(Component.java:3803) at java.awt.EventQueue.dispatchEvent(EventQueue.java:463) at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149) at java.awt.EventDispatchThread.run(EventDispatchThread.java:110) [/code] 请大家帮我看下,谢谢。
Oracle读取二进制BLOB类型数据出现乱码
JAVA中,读取Oracle中二进制BLOB类型数据,出现乱码.. 如果BLOB是文本类型存储的就不会存在乱码 BLOB blob = (oracle.sql.BLOB)rs.getBlob("ys1"); try{ FileOutputStream outStream = new FileOutputStream("c:/oracleback1.txt"); InputStream inStream = blob.getBinaryStream(); byte[] buf = new byte[1024]; int len; while ((len = inStream.read(buf)) > 0) { outStream.write(buf, 0, len); } inStream.close(); outStream.close(); }catch(Exception e) { e.printStackTrace(); } }
查询数据类型为blob类型 报错
hibernate 新增没有问题 查询报错, 数据库存储为blob类型 实体类:IdCardInfo字段为:private byte[] PHOTOS;//照片 dao: Session session = null; List<IdCardInfo> listIdCardInfo = null; Transaction tx = session.beginTransaction(); SQLQuery query = session.createSQLQuery(sql); query.setResultTransformer(Transformers.aliasToBean(IdCardInfo.class)); System.out.print( "*****"+query); listIdCardInfo = query.list(); tx.commit(); return listIdCardInfo; 在listIdCardInfo = query.list();报错 报错信息: 2708850 [SpringJobSchedulerFactoryBean_Worker-10] DEBUG com.mchange.v2.c3p0.impl.NewPooledConnection - com.mchange.v2.c3p0.impl.NewPooledConnection@ca5f99b handling a throwable. com.ibm.db2.jcc.b.SqlException: BigDecimal conversion exception [ibm][db2][jcc][converters] Overflow occurred during numeric data type conversion of "269647".. See attached Throwable. at com.ibm.db2.jcc.c.mb.a(mb.java:1827) at com.ibm.db2.jcc.c.pb.a(pb.java:1098) at com.ibm.db2.jcc.c.pb.a(pb.java:812) at com.ibm.db2.jcc.c.pb.a(pb.java:163) at com.ibm.db2.jcc.c.dc.a(dc.java:266) at com.ibm.db2.jcc.b.tf.a(tf.java:1682) at com.ibm.db2.jcc.b.tf.d(tf.java:2103) at com.ibm.db2.jcc.b.tf.Y(tf.java:540) at com.ibm.db2.jcc.b.tf.executeUpdate(tf.java:523) at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105) at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:133) at org.hibernate.engine.query.spi.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:204) at org.hibernate.internal.SessionImpl.executeNativeUpdate(SessionImpl.java:1313) at org.hibernate.internal.SQLQueryImpl.executeUpdate(SQLQueryImpl.java:401) at cn.com.boomhope.face.dao.hibernate.impl.HbFaceWsLogDao.saveFaceWsLog(HbFaceWsLogDao.java:201) at cn.com.boomhope.face.dao.hibernate.impl.HbFaceWsLogDao.batchAdd(HbFaceWsLogDao.java:44) at cn.com.boomhope.face.service.impl.HbLogServiceImpl.batchAddFaceWsLog(HbLogServiceImpl.java:139) at sun.reflect.GeneratedMethodAccessor21.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:273) at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:311) at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:113) at org.quartz.core.JobRunShell.run(JobRunShell.java:223) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)
BLOB 数据类型 selecte ... for update
在Java中使用for update获取需要更新的BLOB数据类型游标会产生锁,是什么时候释放的呢? 感觉很慢,几分钟不能进行操作,即使数据量很小! [code="java"] .......... Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.128.35:1521:accebiz1", "sales", "salesw"); if (conn != null) { System.out.println("数据库连接成功!"); } else { System.out.println("数据库连接失败!"); } PreparedStatement lock = conn.prepareStatement(this.getSql("insertTemplate"));//从自己写的xml文件中取SQL log.debug(this.getSql("insertTemplate")); lock.setInt(1, Integer.parseInt(templateNo)); lock.setString(2, url); lock.setString(3, model); lock.setInt(4, Integer.parseInt(modelXAxis)); lock.setInt(5, Integer.parseInt(priceXAxis)); lock.setInt(6, Integer.parseInt(inventoryXAxis)); lock.setInt(7, Integer.parseInt(descriptionXAxis)); lock.setInt(8, Integer.parseInt(modelYAxis)); lock.setInt(9, Integer.parseInt(priceYAxis)); lock.setInt(10, Integer.parseInt(inventoryYAxis)); lock.setInt(11, Integer.parseInt(descriptionYAxis)); lock.setString(12, postDate); lock.setInt(13, Integer.parseInt(siteinfoNo)); lock.executeUpdate(); lock.close(); PreparedStatement ps = conn.prepareStatement(this.getSql("lockSQL")); ps.setInt(1, Integer.parseInt(templateNo)); ResultSet dataLock = ps.executeQuery(); while (dataLock.next()) { BLOB modelTemplateBlob = (BLOB) dataLock.getBlob("model_template"); log.debug("------------------->" + modelTemplateBlob.getBufferSize()); OutputStream out = modelTemplateBlob.getBinaryOutputStream(); byte[] blob = modelTemplate.getBytes(); out.write(blob, 0, blob.length); out.close(); log.debug("------------------->4" + dataLock.getString("description_x_axis")); // insertBolb(dataLock, "model_template", modelTemplate.getBytes()); insertBolb(dataLock, "price_template", priceTemplate.getBytes()); insertBolb(dataLock, "description_template", inventoryTemplate.getBytes()); insertBolb(dataLock, "inventory_template", descriptionTemplate.getBytes()); } ps.close(); .............. public void insertBolb(ResultSet data, String columeName, byte[] blob) { try { log.debug("------------------->start"); BLOB modelTemplateBlob = (BLOB) data.getBlob(columeName); OutputStream out = modelTemplateBlob.getBinaryOutputStream(); int size = modelTemplateBlob.getBufferSize(); out.write(blob, 0, blob.length); out.close(); } catch (IOException ex) { log.debug(ex.getMessage()); log.debug(ex.getStackTrace()); } catch (SQLException sqle) { log.debug(sqle.getMessage()); System.err.println(sqle.getMessage()); } } [/code] [b]问题补充:[/b] 嗯!是单行锁定哦! 啊? :cry: 需求文档描述的需求是从客户端取得12个参数,其中4个是blob,然后写入数据库同一张表中...呜呜,怎么用servlet一次从客户端取我都没弄不明白,然后需求人员说用request.getParameter(""),我都没晃明白客户端怎么发送的,能用这个方法取,如果是字符串有一般存clob吧?只好当字符串取了然后转byte[]存。现在存发现被锁住好半天.....需求人员说了算,我提出自己的意见,多说几遍我自己觉得自己在放屁, 明年不打算干这鸟程序员了,干满一年也算对得起这第一份工作了 在现行的情况下,存的时候能够用什么方式优化么?
Java将Blob类型数据存入数据库
javax.sql.rowset.serial.SerialBlob@82b802e存入的为这个而不是Blob数据,请问该怎么办 ``` public int update(int Id,byte[] original_text) { String strSql = "update pro_trans_tesk_t set result_text=? where id=?"; List<Object> arrArgs = new ArrayList<Object>(); arrArgs.add(String.valueOf(original_text)); arrArgs.add(String.valueOf(Id)); MySqlBaseBean mDBBean = new MySqlBaseBean(); return mDBBean.update(strSql, arrArgs); } ``` 入库代码
jsp 输出图片 blob.getBytes()问题
response.setContentType("image/jpeg"); String userName = request.getParameter("userName"); Class.forName("oracle.jdbc.driver.OracleDriver"); String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl"; Connection conn = DriverManager.getConnection(url,"llxx","lorcx"); StringBuilder sql = new StringBuilder(); sql.append("select u.pic from base_user u where u.user_name = '").append(userName).append("'"); PreparedStatement ps = conn.prepareStatement(sql.toString()); ResultSet rs = ps.executeQuery(); if(rs != null){ while (rs.next()){ Blob blob = rs.getBlob(1);//获取文件 int size = (int)blob.length(); byte[] b = blob.getBytes(1,size); ServletOutputStream os = response.getOutputStream(); os.write(b); os.flush(); os.close(); } } 我在调用getBytes时开始位置是1才能显示,为什么不是0
如果用jdbc插入blob字段的记录的主键是sequence如何插入?
通常插入含blob字段的记录时,会插入一个空blob字段,然后选出改条记录写入blob内容,如果这条记录的主键为sequence如如何选出该条记录那?我这里老报rs记录集为空的错误。 [b]问题补充:[/b] to totong:我用了currval还是不行呀:[code="java"] try { String updatesql = "update sentmessagebufferlog set sendresult='9' where sentmessageid ='" + sentmessageid + "'"; log.debug("updatesql is:" + updatesql); String insertsql = "insert into sentmessagebufferlog (sentmessageid,bufferdata,destination,messageid,memo,resendnumber,sentlogtime) values(SEQ_SENT_MESSAGE.nextval,empty_blob(),'" + destination + "','" + messageid + "','" + memo + "','" + resendnumber + "',to_date('" + sentlogtime + "','yyyy-MM-dd HH24:mi:ss '))"; conn = ConnectionManager.currentConnection(); conn.setAutoCommit(false); stmt = DBUtil.getStatement(conn); int rsupdate = stmt.executeUpdate(updatesql); int rsinsert = stmt.executeUpdate(insertsql); String updatestate = String.valueOf(rsupdate); String insertstate = String.valueOf(rsinsert); rs = stmt.executeQuery("select SEQ_SENT_MESSAGE.currval from dual"); String id = rs.getString(0); rsblob = stmt .executeQuery("select bufferdata from sentmessagebufferlog where rownum='"+id+"' for update"); if (rsblob.next()) { oracle.sql.BLOB blob = (BLOB) rsblob.getBlob("bufferdata"); outStream = (OutputStream) ((oracle.sql.BLOB) blob) .getBinaryOutputStream(); byte[] data = buffercontent.getBytes(); // System.out.println("data // is:"+data); outStream.write(data, 0, data.length); } outStream.flush(); outStream.close(); conn.commit(); log.debug("rs is:" + updatestate); // String Json="{success:"; if (updatestate.equals("1") && insertstate.equals("1")) { Json += "true"; Json += "," + "check:true"; Json += "," + "update:true"; log.info(" success update nodeconfig a record"); } else { Json += "false"; Json += "," + "check:true"; Json += "," + "update:false"; log.info(" failure update nodeconfig a record"); } } catch (Exception e) { e.printStackTrace(); System.out.println("insert error"); conn.rollback(); Json += "false"; Json += "," + "check:true"; Json += "," + "update:false"; log.info(" failure update nodeconfig a record"); } finally { if(rs!=null) { rs.close(); } if(rsblob!=null) { rsblob.close(); } if(stmt!=null) { stmt.close(); } if(conn!=null) { conn.close(); } //rsblob.close(); } Json += "}"; [/code]代码贴上
hibernate 连接数据库报错 获取xml失败 求大佬帮忙看一下
## 这是 hibernate.cfg.xml <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="connection.url">jdbc:oracle:thin:@localhost:1521:ORCL</property> <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <property name="connection.username">Reust</property> <property name="connection.password">kingstar</property> <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property> <property name="show_sql">true</property> <property name="format_sql">true</property> <property name="hbm2ddl.auto">update</property><!-- create --> <mapping resource="cd/entity/Igendpd.hbm.xml"/> <mapping resource="cd/entity/Iguser.hbm.xml"/> </session-factory> </hibernate-configuration> ## ## 这是hbm.xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="cd.entity.Igendpd" table="ig_end_pd" ><!-- schema="数据库对象集合名称" --><!-- dynamic-update="true" --><!-- select-before-update="true" --> <id name="igendId" type="Integer"> <column name="ig_end_id" /> <generator class="sequence"> <param name="sequence">SEQ_IG_END_PD</param> </generator> </id> <property name="igendSex" type="string"> <column name="ig_end_sex"> <comment>性别</comment> </column> </property> </class> </hibernate-mapping> <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="cd.entity.Iguser" table="ig_user" ><!-- schema="数据库对象集合名称" --><!-- dynamic-update="true" --><!-- select-before-update="true" --> <id name="igId" type="Integer"> <column name="ig_id" /> <generator class="sequence"> <param name="sequence">SEQ_IG_USER</param> </generator> </id> <property name="igtrueNmae" type="string"> <column name="ig_true_name"> <comment>真实姓名</comment> </column> </property> <property name="iglogName" type="string"> <column name="ig_log_name"> <comment>登陆姓名</comment> </column> </property> <property name="igAge" type="Integer"> <column name="ig_age"> <comment>年龄</comment> </column> </property> <property name="igendID" type="Integer"> <column name="ig_end_id"> <comment>性别ID</comment> </column> </property> <property name="igPwassd" type="string"> <column name="ig_pwassd"> <comment>密码</comment> </column> </property> </class> </hibernate-mapping> 这是 Configuration conf = new Configuration().configure(); 获取seesion 并测试** package meg; import java.util.List; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import cd.dao.ResultDao; import cd.entity.Iguser; public class Test { // 会话工厂 protected static SessionFactory sessionFactory = null; // 绑定到线程的集合 protected static ThreadLocal<Session> sessionThreadLocal = new ThreadLocal<Session>(); public static Session getSession() { Session session = null; if (sessionThreadLocal != null) { session = sessionThreadLocal.get(); } if (session == null) { if (sessionFactory == null) { Configuration conf = new Configuration(); conf.configure(); sessionFactory = conf.buildSessionFactory(); } session = sessionFactory.openSession(); if (sessionThreadLocal == null) { sessionThreadLocal = new ThreadLocal<Session>(); } sessionThreadLocal.set(session); } return session; } public static void main(String[] args) { Test ts=new Test(); ts.getSession(); System.out.print("连接成功"); } } ** 最后这是报错啊 ** 2018-11-14 17:35:44,433 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration boolean -> org.hibernate.type.BooleanType@ba2e48 2018-11-14 17:35:44,433 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration boolean -> org.hibernate.type.BooleanType@ba2e48 2018-11-14 17:35:44,433 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration java.lang.Boolean -> org.hibernate.type.BooleanType@ba2e48 2018-11-14 17:35:44,433 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration numeric_boolean -> org.hibernate.type.NumericBooleanType@130c8e9 2018-11-14 17:35:44,433 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration true_false -> org.hibernate.type.TrueFalseType@9ed91f 2018-11-14 17:35:44,433 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration yes_no -> org.hibernate.type.YesNoType@11a59ce 2018-11-14 17:35:44,433 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration byte -> org.hibernate.type.ByteType@85a863 2018-11-14 17:35:44,433 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration byte -> org.hibernate.type.ByteType@85a863 2018-11-14 17:35:44,433 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration java.lang.Byte -> org.hibernate.type.ByteType@85a863 2018-11-14 17:35:44,433 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration character -> org.hibernate.type.CharacterType@33aa9b 2018-11-14 17:35:44,433 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration char -> org.hibernate.type.CharacterType@33aa9b 2018-11-14 17:35:44,433 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration java.lang.Character -> org.hibernate.type.CharacterType@33aa9b 2018-11-14 17:35:44,433 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration short -> org.hibernate.type.ShortType@1f920cf 2018-11-14 17:35:44,433 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration short -> org.hibernate.type.ShortType@1f920cf 2018-11-14 17:35:44,433 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration java.lang.Short -> org.hibernate.type.ShortType@1f920cf 2018-11-14 17:35:44,433 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration integer -> org.hibernate.type.IntegerType@1773a14 2018-11-14 17:35:44,433 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration int -> org.hibernate.type.IntegerType@1773a14 2018-11-14 17:35:44,433 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration java.lang.Integer -> org.hibernate.type.IntegerType@1773a14 2018-11-14 17:35:44,443 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration long -> org.hibernate.type.LongType@a5ce92 2018-11-14 17:35:44,443 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration long -> org.hibernate.type.LongType@a5ce92 2018-11-14 17:35:44,443 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration java.lang.Long -> org.hibernate.type.LongType@a5ce92 2018-11-14 17:35:44,443 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration float -> org.hibernate.type.FloatType@1bfefb 2018-11-14 17:35:44,443 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration float -> org.hibernate.type.FloatType@1bfefb 2018-11-14 17:35:44,443 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration java.lang.Float -> org.hibernate.type.FloatType@1bfefb 2018-11-14 17:35:44,443 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration double -> org.hibernate.type.DoubleType@5c18ff 2018-11-14 17:35:44,443 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration double -> org.hibernate.type.DoubleType@5c18ff 2018-11-14 17:35:44,443 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration java.lang.Double -> org.hibernate.type.DoubleType@5c18ff 2018-11-14 17:35:44,443 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration big_decimal -> org.hibernate.type.BigDecimalType@ae4f8b 2018-11-14 17:35:44,443 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration java.math.BigDecimal -> org.hibernate.type.BigDecimalType@ae4f8b 2018-11-14 17:35:44,443 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration big_integer -> org.hibernate.type.BigIntegerType@3d12a6 2018-11-14 17:35:44,443 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration java.math.BigInteger -> org.hibernate.type.BigIntegerType@3d12a6 2018-11-14 17:35:44,443 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration string -> org.hibernate.type.StringType@e8f27e 2018-11-14 17:35:44,443 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration java.lang.String -> org.hibernate.type.StringType@e8f27e 2018-11-14 17:35:44,453 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration url -> org.hibernate.type.UrlType@113e371 2018-11-14 17:35:44,453 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration java.net.URL -> org.hibernate.type.UrlType@113e371 2018-11-14 17:35:44,453 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration date -> org.hibernate.type.DateType@93886b 2018-11-14 17:35:44,453 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration java.sql.Date -> org.hibernate.type.DateType@93886b 2018-11-14 17:35:44,453 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration time -> org.hibernate.type.TimeType@3c0737 2018-11-14 17:35:44,453 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration java.sql.Time -> org.hibernate.type.TimeType@3c0737 2018-11-14 17:35:44,453 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration timestamp -> org.hibernate.type.TimestampType@9da1dd 2018-11-14 17:35:44,453 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration java.sql.Timestamp -> org.hibernate.type.TimestampType@9da1dd 2018-11-14 17:35:44,453 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration java.util.Date -> org.hibernate.type.TimestampType@9da1dd 2018-11-14 17:35:44,453 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration dbtimestamp -> org.hibernate.type.DbTimestampType@9db0ad 2018-11-14 17:35:44,453 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration calendar -> org.hibernate.type.CalendarType@1644028 2018-11-14 17:35:44,453 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration java.util.Calendar -> org.hibernate.type.CalendarType@1644028 2018-11-14 17:35:44,453 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.CalendarType@1644028 2018-11-14 17:35:44,453 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration calendar_date -> org.hibernate.type.CalendarDateType@15268d7 2018-11-14 17:35:44,453 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration locale -> org.hibernate.type.LocaleType@b0a518 2018-11-14 17:35:44,453 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration java.util.Locale -> org.hibernate.type.LocaleType@b0a518 2018-11-14 17:35:44,463 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration currency -> org.hibernate.type.CurrencyType@1313e0e 2018-11-14 17:35:44,463 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration java.util.Currency -> org.hibernate.type.CurrencyType@1313e0e 2018-11-14 17:35:44,463 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration timezone -> org.hibernate.type.TimeZoneType@2a2ae9 2018-11-14 17:35:44,463 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration java.util.TimeZone -> org.hibernate.type.TimeZoneType@2a2ae9 2018-11-14 17:35:44,463 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration class -> org.hibernate.type.ClassType@d4a1d3 2018-11-14 17:35:44,463 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration java.lang.Class -> org.hibernate.type.ClassType@d4a1d3 2018-11-14 17:35:44,463 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration uuid-binary -> org.hibernate.type.UUIDBinaryType@7f1228 2018-11-14 17:35:44,463 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration java.util.UUID -> org.hibernate.type.UUIDBinaryType@7f1228 2018-11-14 17:35:44,463 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration uuid-char -> org.hibernate.type.UUIDCharType@d200d8 2018-11-14 17:35:44,463 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration pg-uuid -> org.hibernate.type.PostgresUUIDType@1f854bd 2018-11-14 17:35:44,463 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration binary -> org.hibernate.type.BinaryType@1672313 2018-11-14 17:35:44,463 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration byte[] -> org.hibernate.type.BinaryType@1672313 2018-11-14 17:35:44,463 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration [B -> org.hibernate.type.BinaryType@1672313 2018-11-14 17:35:44,463 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration wrapper-binary -> org.hibernate.type.WrapperBinaryType@1542cdc 2018-11-14 17:35:44,463 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration Byte[] -> org.hibernate.type.WrapperBinaryType@1542cdc 2018-11-14 17:35:44,463 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration [Ljava.lang.Byte; -> org.hibernate.type.WrapperBinaryType@1542cdc 2018-11-14 17:35:44,463 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration image -> org.hibernate.type.ImageType@c2060e 2018-11-14 17:35:44,463 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration characters -> org.hibernate.type.CharArrayType@75d174 2018-11-14 17:35:44,463 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration char[] -> org.hibernate.type.CharArrayType@75d174 2018-11-14 17:35:44,463 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration [C -> org.hibernate.type.CharArrayType@75d174 2018-11-14 17:35:44,463 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration wrapper-characters -> org.hibernate.type.CharacterArrayType@13638d4 2018-11-14 17:35:44,463 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration [Ljava.lang.Character; -> org.hibernate.type.CharacterArrayType@13638d4 2018-11-14 17:35:44,463 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration Character[] -> org.hibernate.type.CharacterArrayType@13638d4 2018-11-14 17:35:44,473 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration text -> org.hibernate.type.TextType@1b271f1 2018-11-14 17:35:44,473 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration blob -> org.hibernate.type.BlobType@5f00f9 2018-11-14 17:35:44,473 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration java.sql.Blob -> org.hibernate.type.BlobType@5f00f9 2018-11-14 17:35:44,473 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration materialized_blob -> org.hibernate.type.MaterializedBlobType@1535ac 2018-11-14 17:35:44,473 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration wrapper_materialized_blob -> org.hibernate.type.WrappedMaterializedBlobType@293b53 2018-11-14 17:35:44,473 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration clob -> org.hibernate.type.ClobType@101f287 2018-11-14 17:35:44,473 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration java.sql.Clob -> org.hibernate.type.ClobType@101f287 2018-11-14 17:35:44,473 DEBUG [org.hibernate.type.BasicTypeRegistry] - Adding type registration materialized_clob -> org.hibernate.type.MaterializedClobType@d8f55c Exception in thread "main" java.lang.NoSuchFieldError: INSTANCE at org.hibernate.type.BasicTypeRegistry.<init>(BasicTypeRegistry.java:94) at org.hibernate.type.TypeResolver.<init>(TypeResolver.java:59) at org.hibernate.cfg.Configuration.<init>(Configuration.java:250) at org.hibernate.cfg.Configuration.<init>(Configuration.java:302) at meg.Test.getSession(Test.java:30) at meg.Test.main(Test.java:45) # # 我直接写测试方法是能测试通的 但是写成hibernate.cfg.xml就不行了 下面是我直接在java中写的 public static void main(String[] args) { Connection con;//声明Connection对象 Statement sql; ResultSet res ; try { Class.forName("oracle.jdbc.driver.OracleDriver");//加载数据库驱动 // System.out.print("加载数据库驱动成功"); } catch (ClassNotFoundException e) { e.printStackTrace(); } try { con=DriverManager.getConnection("jdbc:oracle:" + "thin:@127.0.0.1:1521:ORCL","Reust","kingstar"); // System.out.print("数据库连接成功"); } catch (SQLException e) { // TODO: handle exception e.printStackTrace(); } } }
关于blob对象(图片)的缓存和提取问题
前段时间给客户做了一个会议签到系统 系统中涉及到这么一个问题: 用户签到的时候有一个页面显示当前签到人的照片和最近签到的6个人的照片, 照片数据都以blob对象存储在数据库中的, 为了在页面上显示照片,我直接写了一个servlet来处理照片的请求, servlet中直接把blob二进制流输出给jsp界面。 jsp以<img src="/conference/image" height="280" width="200">的形式向servlet发送请求来获取照片 servlet中以 ServletOutputStream out = res.getOutputStream(); Blob temp = photo.getPhoto(); InputStream is = temp.getBinaryStream(); byte buffer[] = new byte[256]; while (is.read(buffer, 0, 256) != -1) { out.write(buffer); } out.flush(); 的形式响应。 每当有人签到,jsp页面就自动刷新一次来获取新的6张照片 这样设计有几个瓶颈 1、照片本身大小比较大,每张都是200+k,每次刷新所有的照片都要重新到后台去获取,对网络的要求比较高,而且如果多个人同时使用这个页面刷新的话,更是问题 2、每次请求的blob数据都需要到后台数据库中取数据,而且都是 并发的请求,对数据库的连接和数据库都有很大的压力,容易使服务down了 试着改进过,因为每次请求的6张照片中正常情况有5张是重复的,所以我想用hashmap把查出来的结果缓存起来,下次有请求来了,如果在缓存中有了,就直接在缓存中取。没有再到数据库中取,缓存中到了一定数量,再把缓存全部清了,否则肯定会占用大量内存。 但是这样又有问题,java的回收机制自动把我hashmap中的blob对象给清掉了。每次取到的persistence是有的可是到persistence中取blob却是空的了。所以jsp界面显示的照片都是空的。 不知道有没有高人能提出一个好的解决方案。探讨探讨,如何改进。或者重新设计。 不胜感激! [b]问题补充:[/b] HashMap问题blob对象被清 是这样的 HashMap本来就是放在单子实例中的,肯定也是static public class AnalyseDAO extends BasicDAO { private static AnalyseDAO _instance= new AnalyseDAO();; public static AnalyseDAO getInstance() { if (_instance == null) { _instance = new AnalyseDAO(); } return _instance; } private static HashMap photohash = new HashMap(); public TCifPhoto getCifPhoto(String stuempNo){ if(photohash.size()>=50){ photohash.clear(); } if(photohash!=null && photohash.get(stuempNo)!=null){ TCifPhoto tmp= (TCifPhoto)photohash.get(stuempNo); if(tmp.getPhoto()==null){ System.out.println("omg that's it lob is empty"); } return tmp; }else{ Session s = getSession(); String sql = " from TCifPhoto cif where cif.stuempNo= '"+stuempNo+"'"; try { Query q = s.createQuery(sql); List list = q.list(); if(list!=null&&list.size()>0){ return (TCifPhoto)list.get(0); }else{ return null; } } catch (HibernateException he) { throw he; } } } 这样的设计在tomcat上跑一点问题都没有 HashMap中的数据也能取到,可是一但到websphere上HashMap中存储的TCifPhoto 这个persistence还在,就是persistence里面的二进制lob对象没有了,从代码里看出系统输出了“omg that's it lob is empty”就很明显知道问题的状况。可以判定websphere把lob字段给清了。 或者另一种架设是websphere用到了对lob字段的lazyload的方式或者别的。没有找到相应的文档资料。 [b]问题补充:[/b] 又补充讨论一下: 现在看来armorking说的应该是对的,blob的操作是逻辑指针,数据库连接释放后就不能取到值了。而tomcat和websphere数据库连接的管理方式又别,所以同样的代码,tomcat能正常运行,websphere就不行。(这有待继续挖掘区别,o(∩_∩)o...)。 其实把blob缓存,我觉得不是最好的方案吧,即时做成byte[]缓存解决了原先的问题,但是,每张图片有300k,在签到峰值时期,每个用户客户端与服务器的网络流量将达到很高的程度,假设刷新为2s一次 300K*6=1.8M ,接近1M/s。再加上如果有多个客户端在刷。服务器流量将受到考验。 所以我考虑是不是可以把照片缓存到每个客户端ie缓存中。首先把第一次请求的照片数据从数据库中取出缓存到服务器硬盘上。而客户端直接通过url来存取服务器上的照片。每次刷新后,相同的照片ie会自动取ie缓存中的照片,而不会再到服务器上取,这样就能解决原来的两个问题了。 不知道大家有什么建议?
请教IDEA while循环debug问题
# 想调试一个使用JDBC从数据库读取Blob类型数据的程序,但是试了很多次debug不了其中的while循环 ## 在Servlet实现类的doPost方法中试了一个简单的while循环,发现可以调试 ```java int a=11; int i=0; while (++i<a){ System.out.println(i); } ``` ![图片说明](https://img-ask.csdn.net/upload/201910/02/1570014345_777656.png) ## 代码 ### Servlet doPost ``` String sql = "SELECT * FROM resource WHERE id = ?"; String[] path = new String[1]; path[0] = "F:\\program design\\JavaWeb\\web\\resource\\2.png"; //下面的方法传入数据库连接,接收数据的类,sql语句以及要将数据库中提取的文件放入的路径和sql语句中?的替代 //返回接收数据的类的实例的集合 ArrayList<Datas> arrayList = JDBC.searchBolb(connection, Datas.class, sql, path, 1); PrintWriter writer = response.getWriter(); for (Datas d : arrayList) { writer.println(d); } ``` ### JDBC ```java //重点请看while循环,其他错误只要能调试while循环我自己慢慢找 public static <T> ArrayList<T> searchBolb(Connection connection, Class<T> clazz, String sql, String[] resourcePath, Object... args) { //数据库表中最后一个字段为Blob类型 //输出类中封装Blob资源输出地址 PreparedStatement ps = null; ResultSet result = null; ResultSetMetaData rsmd = null; InputStream is = null; FileOutputStream fos = null; int resourcePathNumber = 0; ArrayList<T> collection = new ArrayList<T>(); try { ps = connection.prepareStatement(sql); for (int i = 0; i < args.length; i++) { ps.setObject(i + 1, args[i]); } result = ps.executeQuery(); rsmd = result.getMetaData(); while (result.next()) { int columnCount = rsmd.getColumnCount(); T t = clazz.getDeclaredConstructor().newInstance(); for (int i = 0; i < columnCount - 1; i++) { Object columnValue = result.getObject(i + 1); String columnLabel = rsmd.getColumnLabel(i + 1); Field field = clazz.getDeclaredField(columnLabel); field.setAccessible(true); field.set(t, columnValue); } Blob blob = result.getBlob(columnCount); String blobLabel = rsmd.getColumnLabel(columnCount); Field field = clazz.getDeclaredField(blobLabel); field.setAccessible(true); field.set(t, resourcePath); is = blob.getBinaryStream(); fos = new FileOutputStream(resourcePath[resourcePathNumber++]); byte[] buffer = new byte[1024]; int len; while ((len = is.read(buffer)) != -1) { fos.write(buffer, 0, len); } collection.add(t); } } catch (SQLException | IOException | NoSuchFieldException | NoSuchMethodException | IllegalAccessException | InstantiationException | InvocationTargetException e) { e.printStackTrace(); } finally { try { ps.close(); is.close(); fos.close(); } catch (SQLException | IOException e) { e.printStackTrace(); } if (collection == null) { System.out.println("Failed to search"); } return collection; } } ```` ![图片说明](https://img-ask.csdn.net/upload/201910/02/1570015047_843639.png) ![图片说明](https://img-ask.csdn.net/upload/201910/02/1570015068_774806.png) <br> 把断点设在144行(while循环第一行),运行到for循环第一行出错(用的f8,不进入方法体)(没有while循环过,这是第一次for循环),这里的错误是结果集关闭,但是显然并没有任何操作使之关闭(我试了另外一个没有问题的方法,报的同样的错误),怀疑是刚开始debug时就已经进行完了while循环,导致结果集关闭 <br> 请问需要把断点设在哪里,或者是怎么样才能解决上述问题?3Q
ibatis调用存储过程入参问题
<p style="" align="left"><span lang="EN-US" style=""><span style="color: #000000;">CREATE OR REPLACE TYPE EMP_SALARY_REC AS OBJECT (<br> EMP_ID NUMBER(5),<br> EMP_NAME VARCHAR2(255),<br> START_DATE DATE,<br> SALARY NUMBER <br>);<br>/<br><br>CREATE OR REPLACE Type EMP_SALARY_TAB AS TABLE OF EMP_SALARY_REC;<br>/<br><br>next we will create a small package with one single test procedure<br><br>CREATE OR REPLACE PACKAGE EMP_SALARY_PKG IS<br> PROCEDURE GET_EMP_SALARIES(i_array IN EMP_SALARY_TAB,o_array OUT<br>EMP_SALARY_TAB);<br>End EMP_SALARY_PKG;<br>/<br></span><br>用ibatis就不能配置调用吗?</span></p><br/><strong>问题补充</strong><br/><div class="quote_title">niwenbin 写道</div><div class="quote_div">SQL Map通过&lt;procedure&gt;元素支持存储过程。下面的例子说明如何使用具有输出参数的存储过程。 <br />&lt;parameterMap id="swapParameters" class="map" &gt; <br />&lt;parameter property="email1" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/&gt; <br />&lt;parameter property="email2" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/&gt; <br />&lt;/parameterMap&gt; <br />&lt;procedure id="swapEmailAddresses" parameterMap="swapParameters" &gt; <br />{call swap_email_address (?, ?)} <br />&lt;/procedure&gt; <br />调用上面的存储过程将同时互换两个字段(数据库表)和参数对象(Map)中的两个email <br />地址。如果参数的mode属性设为INOUT或OUT,则参数对象的值被修改。否则保持不变。</div> <br /> <br /> <br />参数是自定义的type类型(EMP_SALARY_TAB): <br />CREATE OR REPLACE TYPE EMP_SALARY_REC AS OBJECT ( <br />EMP_ID NUMBER(5), <br />EMP_NAME VARCHAR2(255), <br />START_DATE DATE, <br />SALARY NUMBER <br />); <br />CREATE OR REPLACE Type EMP_SALARY_TAB AS TABLE OF EMP_SALARY_REC; <br /><br/><strong>问题补充</strong><br/><div class="quote_title">threejin520 写道</div><div class="quote_div">Ibatis访问存储过程的配置 zz&nbsp; 2009-10-30 16:35:48|&nbsp; 分类: Java |&nbsp; 标签: |字号大 <br />中 <br />小 订阅 <br /> <br />最近项目里经常需要配置用Ibatis访问存储过程(或函数),多次摸索,发现配置的难点是在于如何配置输入输出参数。现以访问Oracle的存储过程(或函数)举例说明。 <br /> <br />一般基本的配置要点如下: <br /> <br />(1)、访问存储过程(或函数)一般以procedure标签来定义statement。 <br /> <br />(2)、输入输出的参数需要用parameterMap标签单独定义。 <br /> <br />(3)、区分输入输出参数用parameter标签的mode属性来定义,分别为”OUT”和”IN”。 <br /> <br />按照是否有返回值,是否使用游标分类说明如下: <br /> <br />第一类,没有返回结果,有输出参数以out标识的过程访问配置样式: <br /> <br />&lt;parameterMap id=”functionPramsMap” class=”map”&gt; <br /> <br />&lt;parameter property=”p1″ jdbcType=”VARCHAR” javaType=”string” mode=”IN”/&gt; <br /> <br />&lt;parameter property=”p2″ jdbcType=”INTEGER” javaType=”int” mode=”IN”/&gt; <br /> <br />&lt;parameter property=”p3″ jdbcType=”INTEGER” javaType=”int” mode=”OUT” /&gt; <br /> <br />&lt;/parameterMap&gt; <br /> <br />&lt;procedure id=”statementId” parameterMap=”functionPramsMap”&gt; <br /> <br />{call packageName.functionName(?,?,?)} <br /> <br />&lt;/procedure&gt; <br /> <br />第二类,有返回结果,有输出参数以out标识的过程访问配置样式: <br /> <br />&lt;parameterMap id=”functionParamsMap” class=”map”&gt; <br /> <br />&lt;parameter property=”p0″ jdbcType=” INTEGER” javaType=”string” mode=”OUT”/&gt; <br /> <br />&lt;parameter property=”p1″ jdbcType=”VARCHAR” javaType=”string” mode=”IN”/&gt; <br /> <br />&lt;parameter property=”p2″ jdbcType=”INTEGER” javaType=”int” mode=”IN”/&gt; <br /> <br />&lt;parameter property=”p3″ jdbcType=”INTEGER” javaType=”int” mode=”OUT” /&gt; <br /> <br />&lt;/parameterMap&gt; <br /> <br />&lt;procedure id=”statementId” parameterMap=” functionParamsMap”&gt; <br /> <br />{?=call packageName.functionName(?,?,?)} <br /> <br />&lt;/procedure&gt; <br /> <br />这里参数p0标识调用过程的返回结果。 <br /> <br />第三类,有使用游标的的过程访问配置样式: <br /> <br />&lt;resultMap id=”resultMap” class=”package.ClassA”&gt; <br /> <br />&lt;result property=”property0″ column=”field0″ /&gt; <br /> <br />&lt;result property=”property1″ column=”field2″ /&gt; <br /> <br />&lt;result property=”property2″ column=”field3″ /&gt; <br /> <br />&lt;/resultMap&gt; <br /> <br />&lt;parameterMap id=”functionParamsMap” class=”map”&gt; <br /> <br />&lt;parameter property=”p0″ jdbcType=” INTEGER” javaType=”string” mode=”OUT”/&gt; <br /> <br />&lt;parameter property=”p1″ jdbcType=”VARCHAR” javaType=”string” mode=”IN”/&gt; <br /> <br />&lt;parameter property=”p2″ jdbcType=”INTEGER” javaType=”int” mode=”IN”/&gt; <br /> <br />&lt;parameter property=”p3″ jdbcType=”ORACLECURSOR” <br /> <br />javaType=”java.sql.ResultSet” mode=”OUT” resultMap=”resultMap” /&gt; <br /> <br />&lt;/parameterMap&gt; <br /> <br />&lt;procedure id=”statementId” parameterMap=”functionPramsMap”&gt; <br /> <br />{?=call packageName.functionName(?,?,?)} <br /> <br />&lt;/procedure&gt; <br /> <br />这里,关键注意的是p3参数,由于使用的是oracle数据库驱动,所以用jdbcType=”ORACLECURSOR”表示oracle游标,同时由于是游标,所以javaType=”java.sql.ResultSet”。最后必须要给参数p3配置好resultMap属性,以说明游标返回的结果集映射方式,不配置此属性,在代码里来访问结果集是不行的。此时,在Java代码里调用的样式如下: <br /> <br />HashMap&lt;String, Object&gt; params = new HashMap&lt;String, Object&gt;(); <br /> <br />params.put(”p1″, p1); <br /> <br />params.put(”p2″, p2); <br /> <br />sqlMapClient.queryForObject(”statementId”, params); <br /> <br />List&lt;ClassA&gt; list = (List&lt;ClassA&gt;) params.get(”p3″); <br /> <br />if (list != null &amp;&amp; list.size() &gt; 0) { <br /> <br />return userList.get(0); <br /> <br />} <br /> <br />return null; <br /> <br />第四类,有复杂的参数类型的存储过程: <br /> <br />(1)、对于BLOB或者CLOB,在POJO里的属性都定义为byte[]类型,iBatis配置里跟普通类型参数一样处理; <br /> <br />(2)、实现TypeHandler来自定义类型处理器用户处理复杂的字段; <br /> <br />(3)、对于数据库自定义的数据类型,首先要定义实现了java.sql.SQLData的类Class TypeA。实现getSQLTypeName方法,返回值为数据库的自定义类型名。配置文件里parameter标签的属性如:jdbcType=”TypeB” JavaType=”TypeA”,同时还要写TypeHandlerCallback用于处理jdbcType=”TypeB”的类型。 <br /></div> <br />我现在需要第四类的例子,如何构建ARRAY
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
【JSON解析】浅谈JSONObject的使用
简介 在程序开发过程中,在参数传递,函数返回值等方面,越来越多的使用JSON。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,同时也易于机器解析和生成、易于理解、阅读和撰写,而且Json采用完全独立于语言的文本格式,这使得Json成为理想的数据交换语言。 JSON建构于两种结构: “名称/值”对的集合(A Collection of name/va...
《MySQL 性能优化》之理解 MySQL 体系结构
本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
只因接了一个电话,程序员被骗 30 万!
今天想给大家说一个刚刚发生在我身边的一起真实的诈骗经历,我的朋友因此被骗走30万。注:为了保护当事人隐私,部分情节进行了修改。1平安夜突来的电话开始以为就像普通的诈骗一样,想办法让你把钱...
我一个37岁的程序员朋友
周末了,人一旦没有点事情干,心里就瞎想,而且跟几个老男人坐在一起,更容易瞎想,我自己现在也是 30 岁了,也是无时无刻在担心自己的职业生涯,担心丢掉工作没有收入,担心身体机能下降,担心突...
python自动下载图片
近日闲来无事,总有一种无形的力量萦绕在朕身边,让朕精神涣散,昏昏欲睡。 可是,像朕这么有职业操守的社畜怎么能在上班期间睡瞌睡呢,我不禁陷入了沉思。。。。 突然旁边的IOS同事问:‘嘿,兄弟,我发现一个网站的图片很有意思啊,能不能帮我保存下来提升我的开发灵感?’ 作为一个坚强的社畜怎么能说自己不行呢,当时朕就不假思索的答应:‘oh, It’s simple. Wait for me for a ...
一名大专同学的四个问题
【前言】   收到一封来信,赶上各种事情拖了几日,利用今天要放下工作的时机,做个回复。   2020年到了,就以这一封信,作为开年标志吧。 【正文】   您好,我是一名现在有很多困惑的大二学生。有一些问题想要向您请教。   先说一下我的基本情况,高考失利,不想复读,来到广州一所大专读计算机应用技术专业。学校是偏艺术类的,计算机专业没有实验室更不用说工作室了。而且学校的学风也不好。但我很想在计算机领...
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
Java 14 都快来了,为什么还有这么多人固守Java 8?
从Java 9开始,Java版本的发布就让人眼花缭乱了。每隔6个月,都会冒出一个新版本出来,Java 10 , Java 11, Java 12, Java 13, 到2020年3月份,...
达摩院十大科技趋势发布:2020 非同小可!
【CSDN编者按】1月2日,阿里巴巴发布《达摩院2020十大科技趋势》,十大科技趋势分别是:人工智能从感知智能向认知智能演进;计算存储一体化突破AI算力瓶颈;工业互联网的超融合;机器间大规模协作成为可能;模块化降低芯片设计门槛;规模化生产级区块链应用将走入大众;量子计算进入攻坚期;新材料推动半导体器件革新;保护数据隐私的AI技术将加速落地;云成为IT技术创新的中心 。 新的画卷,正在徐徐展开。...
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
Idea 中最常用的10款插件(提高开发效率),一定要学会使用!
学习使用一些插件,可以提高开发效率。对于我们开发人员很有帮助。这篇博客介绍了开发中使用的插件。
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
木兰编程语言,当事人最新回复来了
同行12年,不知Python是木兰,当事人回应来了
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } ...
那个在阿里养猪的工程师,5年了……
简介: 在阿里,走过1825天,没有趴下,依旧斗志满满,被称为“五年陈”。他们会被授予一枚戒指,过程就叫做“授戒仪式”。今天,咱们听听阿里的那些“五年陈”们的故事。 下一个五年,猪圈见! 我就是那个在养猪场里敲代码的工程师,一年多前我和20位工程师去了四川的猪场,出发前总架构师慷慨激昂的说:同学们,中国的养猪产业将因为我们而改变。但到了猪场,发现根本不是那么回事:要个WIFI,没有;...
为什么程序猿都不愿意去外包?
分享外包的组织架构,盈利模式,亲身经历,以及根据一些外包朋友的反馈,写了这篇文章 ,希望对正在找工作的老铁有所帮助
Java校招入职华为,半年后我跑路了
何来 我,一个双非本科弟弟,有幸在 19 届的秋招中得到前东家华为(以下简称 hw)的赏识,当时秋招签订就业协议,说是入了某 java bg,之后一系列组织架构调整原因等等让人无法理解的神操作,最终毕业前夕,被通知调往其他 bg 做嵌入式开发(纯 C 语言)。 由于已至于校招末尾,之前拿到的其他 offer 又无法再收回,一时感到无力回天,只得默默接受。 毕业后,直接入职开始了嵌入式苦旅,由于从未...
立即提问