在执行插入文章(2000个汉字以上)时,执行插入SQL的时候,抛错:
-------------------------------
execute JDBC batch update; uncategorized SQLException for SQL [update BOOK_INFO set PUBLISH_ID=?, BOOK_CLASS_ID=?, BOOK_NAME=?, WRITER_NAME=?, PUBLISH_DATE=?, PAGE_NUM=?, BOOK_CONTENT_INTRO=?, BOOK_PRICE=?, REBATE=?, BOOK_COL=?, PIC_URL=?, ISBN=?, WORD_NUMBER=?, PUBLISH_TIMES=? where BOOK_ID=?]; SQL state [72000]; error code [1461]; ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值
; nested exception is java.sql.BatchUpdateException: ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值
--------------------------------
如果少于2000汉字,则正常,请问如何解决。有的专家说要设置一下数据库某个参数,但是到底是那个参数也没有说明。上面是更新语句,插入的时候跟这情况是一样的。
-------------------------------
execute JDBC batch update; uncategorized SQLException for SQL [update BOOK_INFO set PUBLISH_ID=?, BOOK_CLASS_ID=?, BOOK_NAME=?, WRITER_NAME=?, PUBLISH_DATE=?, PAGE_NUM=?, BOOK_CONTENT_INTRO=?, BOOK_PRICE=?, REBATE=?, BOOK_COL=?, PIC_URL=?, ISBN=?, WORD_NUMBER=?, PUBLISH_TIMES=? where BOOK_ID=?]; SQL state [72000]; error code [1461]; ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值
; nested exception is java.sql.BatchUpdateException: ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值
--------------------------------
如果少于2000汉字,则正常,请问如何解决。有的专家说要设置一下数据库某个参数,但是到底是那个参数也没有说明。上面是更新语句,插入的时候跟这情况是一样的。
解决方案 »
- 这样的sql怎么写?
- oracle 查询
- 关于create tabel as select ...的问题
- oracle11g有没类似于9i的sqlplus worksheet开发工具?
- 急!怎样设计用户权限的表呢?
- 定义一个过程实现插入数据,依据每门课程人数限制来限制插入
- SQL高手请进,这个题目是一个外企的面试题目!
- 用create database 创建了一个数据库,连接不上
- oracle启动后,cpu利用率100%,shutdown abort,startup 后问题仍然,how to resolve?
- oracle数据空间问题
- 触发器内动态sql传:new值问题
- 向SQL高手请教--要实现这样的查询功能SQL语句该怎样写?
CLOB clob = new CLOB((OracleConnection)con);
clob = oracle.sql.CLOB.createTemporary((OracleConnection)con,true,1);
//对CLOB对象赋值
clob.putString(1,formateSingleQuotes(Content));
OracleConnection OCon = (OracleConnection)con;
OraclePreparedStatement pstmt = (OraclePreparedStatement)OCon.prepareCall(strSql);//这一条,看到了吗,关键,setCLOB
pstmt.setCLOB(1,clob);
经过了2天的网络上搜寻,我发现最好的办法是下载oracle 10g jdbc驱动,这样你可以跟正常操作string类型一样对clob进行操作,perfect。
见:http://download-east.oracle.com/otn_hosted_doc/jdeveloper/904preview/jdbc-javadoc/oracle/sql/BLOB.html#freeTemporary()
网络上有个例子对现在的hibernate3.0是不合适,应为那个例子是针对hibernate1.0的,该例子为:
s = sf.openSession();
tx = s.beginTransaction();
foo = new Foo();
foo.setClob( Hibernate.createClob(" ") );
s.save(foo);
s.flush();
s.refresh(foo, LockMode.UPGRADE); //grabs an Oracle CLOB
oracle.sql.CLOB clob = (oracle.sql.CLOB) foo.getClob();
java.io.Writer pw = clob.getCharacterOutputStream();
pw.write(content);
pw.close();
tx.commit();
s.close();在hibernate3.0操作,出现: ClassCastException错误,大家切记。
我解决程序:
public String save(BookInfo entity) throws Exception {
log.debug("saving BookInfo instance");
try {
entity.setBookCol(Hibernate.createClob(entity.getBookColS()));
//写入的大字符串(超过4000个字节)在entity.getBookColS()中
entity.setBookContentIntro(Hibernate.createClob(entity
.getBookContentIntroS()));
return entity.getBookId(); } catch (Exception re) {
log.error("save failed", re);
throw re;
}
}
hibernate映射文件:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="com.book.entity.BookInfo" table="BOOK_INFO">
<id name="bookId" type="string">
<column name="BOOK_ID" length="32" />
<generator class="uuid.hex" />
</id>
<many-to-one name="publisher" class="com.book.entity.Publisher" fetch="join" lazy="false">
<column name="PUBLISH_ID" length="32" />
</many-to-one>
<many-to-one name="bookClass" class="com.book.entity.BookClass" fetch="join" lazy="true">
<column name="BOOK_CLASS_ID" length="32" />
</many-to-one>
<property name="bookName" type="string">
<column name="BOOK_NAME" length="32" />
</property>
<property name="writerName" type="string">
<column name="WRITER_NAME" length="32" />
</property>
<property name="publishDate" type="date">
<column name="PUBLISH_DATE" length="7" />
</property>
<property name="pageNum" type="int">
<column name="PAGE_NUM"/>
</property>
<property name="bookContentIntro" type="java.sql.Clob">
<column name="BOOK_CONTENT_INTRO" />
</property>
<property name="bookPrice" type="double">
<column name="BOOK_PRICE" precision="5" />
</property>
<property name="rebate" type="double">
<column name="REBATE" precision="1" />
</property>
<property name="bookCol" type="java.sql.Clob">
<column name="BOOK_COL" />
</property>
<property name="picUrl" type="string">
<column name="PIC_URL" length="100" />
</property>
<property name="isbn" type="string">
<column name="ISBN" length="50" />
</property>
<property name="wordNumber" type="string">
<column name="WORD_NUMBER" />
</property>
<property name="publishTimes" type="string">
<column name="PUBLISH_TIMES"/>
</property>
<set name="bookSonOrders" inverse="true">
<key>
<column name="BOOK_ID" length="32" />
</key>
<one-to-many class="com.book.entity.BookSonOrder" />
</set>
<set name="bookComments" inverse="true">
<key>
<column name="BOOK_ID" length="32" />
</key>
<one-to-many class="com.book.entity.BookComment" />
</set>
</class>
</hibernate-mapping>
实体文件:
package com.book.entity;import java.sql.Clob;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;/**
* BookInfo generated by MyEclipse - Hibernate Tools
*/public class BookInfo implements java.io.Serializable { // Fields /**
*
*/
private static final long serialVersionUID = 1L; private String bookId; private Publisher publisher = new Publisher(); private BookClass bookClass = new BookClass(); private String bookName; private String writerName; private Date publishDate; private int pageNum; private Clob bookContentIntro; private double bookPrice; private double rebate; private Clob bookCol; private String picUrl; private Set bookSonOrders = new HashSet(0); private Set bookComments = new HashSet(0);
private String bookContentIntroS;
private String bookColS;
private String isbn;
private String wordNumber;
private String publishTimes; /** default constructor */
public BookInfo() { } // Property accessors public String getBookId() {
return this.bookId;
} public void setBookId(String bookId) {
this.bookId = bookId;
} public Publisher getPublisher() {
if (this.publisher == null) {
return new Publisher();
}
return this.publisher;
} public void setPublisher(Publisher publisher) {
this.publisher = publisher;
} public BookClass getBookClass() {
if (this.bookClass == null) {
return new BookClass();
}
return this.bookClass;
} public void setBookClass(BookClass bookClass) {
this.bookClass = bookClass;
} public String getBookName() {
return this.bookName;
} public void setBookName(String bookName) {
this.bookName = bookName;
} public String getWriterName() {
return this.writerName;
} public void setWriterName(String writerName) {
this.writerName = writerName;
} public Date getPublishDate() {
return this.publishDate;
} public void setPublishDate(Date publishDate) {
this.publishDate = publishDate;
} public int getPageNum() {
return this.pageNum;
} public void setPageNum(int pageNum) {
this.pageNum = pageNum;
}
public double getBookPrice() {
return this.bookPrice;
} public void setBookPrice(double bookPrice) {
this.bookPrice = bookPrice;
} public double getRebate() {
return this.rebate;
} public void setRebate(double rebate) {
this.rebate = rebate;
} public String getPicUrl() {
return this.picUrl;
} public void setPicUrl(String picUrl) {
this.picUrl = picUrl;
} public Set getBookSonOrders() {
return this.bookSonOrders;
} public void setBookSonOrders(Set bookSonOrders) {
this.bookSonOrders = bookSonOrders;
} public Set getBookComments() {
return this.bookComments;
} public void setBookComments(Set bookComments) {
this.bookComments = bookComments;
} public Clob getBookCol() {
return bookCol;
} public void setBookCol(Clob bookCol) {
this.bookCol = bookCol;
} public Clob getBookContentIntro() {
return bookContentIntro;
} public void setBookContentIntro(Clob bookContentIntro) {
this.bookContentIntro = bookContentIntro;
} public String getBookColS() {
return bookColS;
} public void setBookColS(String bookColS) {
this.bookColS = bookColS;
} public String getBookContentIntroS() {
return bookContentIntroS;
} public void setBookContentIntroS(String bookContentIntroS) {
this.bookContentIntroS = bookContentIntroS;
} public String getIsbn() {
return isbn;
} public void setIsbn(String isbn) {
this.isbn = isbn;
} public String getPublishTimes() {
return publishTimes;
} public void setPublishTimes(String publishTimes) {
this.publishTimes = publishTimes;
} public String getWordNumber() {
return wordNumber;
} public void setWordNumber(String wordNumber) {
this.wordNumber = wordNumber;
}}
一切OK,我检验过了,操作时间:2006-8-13 15:00分。
PreparedStatement pstmt = conn.prepareStatement( "INSERT INTO book_info(bookContentIntro) VALUES(?)");//我就写一个字段
pstmt.setString(1, str);//str就是大字符串拉
pstmt.executeUpdate();
一切OK。
---------------------------------
注意,上面的程序是在oracle 10g下运行的,下载地址:
http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc101040.html
记得自己打包哦,不会打包的找我:MSN: [email protected] ,要著名你是讨论问题,要不然,不通过哦。
这个是关键,原理是一样的.
窗户纸就这么一层,一点就破.
public String save(BookInfo entity) throws Exception {
log.debug("saving BookInfo instance");
try {
entity.setBookCol(Hibernate.createClob(" "));
entity.setBookContentIntro(Hibernate.createClob(" "));
getHibernateTemplate().save(entity);
getHibernateTemplate().flush();
getHibernateTemplate().refresh(entity, LockMode.UPGRADE); SerializableClob bookCol = (SerializableClob) entity.getBookCol();
Clob jbookColClob = bookCol.getWrappedClob();
CLOB oClob = (CLOB) jbookColClob;
Writer wtBookCol = oClob.getCharacterOutputStream();
wtBookCol.write(entity.getBookColS());
wtBookCol.close(); SerializableClob bookContentIntro = (SerializableClob) entity
.getBookContentIntro();
Clob jbookContentIntroClob = bookContentIntro.getWrappedClob();
CLOB obookContentIntroClob = (CLOB) jbookContentIntroClob;
Writer wtBookContentIntro = obookContentIntroClob
.getCharacterOutputStream();
wtBookContentIntro.write(entity.getBookContentIntroS());
wtBookContentIntro.close(); return entity.getBookId(); } catch (Exception re) {
log.error("save failed", re);
throw re;
}
}