﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Spring、Hibernate、Struts-随笔分类-Oracle</title><link>http://www.blogjava.net/ahgf/category/3849.html</link><description>J2EE开发</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 07:48:35 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 07:48:35 GMT</pubDate><ttl>60</ttl><item><title>Weblogic+oracle开发时遇到的一个和中文有关的问题</title><link>http://www.blogjava.net/ahgf/archive/2005/10/20/16091.html</link><dc:creator>ahgf</dc:creator><author>ahgf</author><pubDate>Thu, 20 Oct 2005 02:51:00 GMT</pubDate><guid>http://www.blogjava.net/ahgf/archive/2005/10/20/16091.html</guid><wfw:comment>http://www.blogjava.net/ahgf/comments/16091.html</wfw:comment><comments>http://www.blogjava.net/ahgf/archive/2005/10/20/16091.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ahgf/comments/commentRss/16091.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ahgf/services/trackbacks/16091.html</trackback:ping><description><![CDATA[前提：<BR>Weblogic：8.1.4<BR>Oracle：9.0.1<BR><BR>表<BR>CREATE TABLE MYTABLE<BR>(<BR>&nbsp; ID&nbsp;&nbsp;&nbsp; INTEGER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NOT NULL,<BR>&nbsp; NAME&nbsp; CHAR(30 BYTE)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NOT NULL<BR>)<BR><BR>在程序中使用下述方法插入7个中文字符：<BR>getJdbcTemplate().execute("insert into mytable (id, name) values(1, '我的测试和结果')");<BR><BR>下面分为两种测试方法：<BR><BR>方法一：<BR>使用Weblogic自带的ojdbc14.jar，打印刚刚插入的结果的长度为23，这是因为驱动会认为一个中文为2个字节，这样插入后会自动在中文后面加上30-7*2个字节。<BR><BR>方法二：<BR>用oracle网站下载的该驱动时则打印的长度变为30。这表明此时驱动会认为一个中文为1个字节，这样插入后会自动在中文后面加上30-7*1个字节。<BR><BR>这样就出现了一个问题，如果使用方法二取出刚插入的名称作为新的名称再插入一条记录时会出错，错误为插入的字符值过大。这是因为取出后一个中文在java里认为是两个字节，这样此时的长度为30+7，当然会出错。<BR><BR>解决方法：把char改为varchar2。<BR><BR>但这样的话就使得我要对几乎所有的表进行修改，这是我不想要的。希望大家给我提个好的建议，该如何解决从weblogic自带的驱动改为oracle自带的驱动，而不用大的修改的问题。注：因为其他原因需要更换驱动。<BR><BR><BR><BR><BR><BR><img src ="http://www.blogjava.net/ahgf/aggbug/16091.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ahgf/" target="_blank">ahgf</a> 2005-10-20 10:51 <a href="http://www.blogjava.net/ahgf/archive/2005/10/20/16091.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>两种获取Oracle Sequence的方法 </title><link>http://www.blogjava.net/ahgf/archive/2005/10/14/15505.html</link><dc:creator>ahgf</dc:creator><author>ahgf</author><pubDate>Fri, 14 Oct 2005 03:24:00 GMT</pubDate><guid>http://www.blogjava.net/ahgf/archive/2005/10/14/15505.html</guid><wfw:comment>http://www.blogjava.net/ahgf/comments/15505.html</wfw:comment><comments>http://www.blogjava.net/ahgf/archive/2005/10/14/15505.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ahgf/comments/commentRss/15505.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ahgf/services/trackbacks/15505.html</trackback:ping><description><![CDATA[<P>前提：</P><PRE class=programlisting>CREATE TABLE Booking (
<SPAN style="BACKGROUND-COLOR: #c0c0c0">&nbsp;&nbsp;id INTEGER NOT NULL,</SPAN>
  date_made DATE,
  reserved_until TIMESTAMP,
  price DECIMAL(15, 2) NOT NULL,
  Purchase_id INTEGER,
  PRIMARY KEY(id))  <A name=458></A><A name=beginpage.></A>
</PRE><PRE class=programlisting><PRE class=programlisting>create sequence booking_seq 
  start with 1 
  increment by 1 
  nomaxvalue;</PRE><PRE class=programlisting></PRE><PRE class=programlisting><STRONG>方法一：<BR></STRONG>利用Spring的org.springframework.jdbc.support.incrementer.OracleSequenceMaxValueIncrementer</PRE><PRE class=programlisting></PRE><PRE class=programlisting><PRE class=programlisting>OracleSequenceMaxValueIncrementer incr = 
    new OracleSequenceMaxValueIncrementer(dataSource, "booking_seq");
   
public int getNewBookingId() {
  return incr.nextIntValue();
}</PRE><PRE class=programlisting></PRE><PRE class=programlisting>针对不同的数据库Spring提供了不同的支持类。</PRE><PRE class=programlisting></PRE><PRE class=programlisting><STRONG>方法二：</STRONG>使用数据库本身的触发器</PRE><PRE class=programlisting></PRE><PRE class=programlisting>CREATE OR REPLACE TRIGGER tib_booking BEFORE INSERT<BR>ON BOOKING FOR EACH ROW<BR>DECLARE<BR>&nbsp;&nbsp;&nbsp; integrity_error&nbsp; EXCEPTION;<BR>&nbsp;&nbsp;&nbsp; errno&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INTEGER;<BR>&nbsp;&nbsp;&nbsp; errmsg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CHAR(200);<BR>&nbsp;&nbsp;&nbsp; dummy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INTEGER;<BR>&nbsp;&nbsp;&nbsp; FOUND&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BOOLEAN;</PRE><PRE class=programlisting>BEGIN<BR>&nbsp;&nbsp;&nbsp; --&nbsp; Column "ID" uses sequence booking_seq <BR>&nbsp;&nbsp;&nbsp; SELECT booking_seq.NEXTVAL INTO :NEW.ID FROM dual;</PRE><PRE class=programlisting>--&nbsp; Errors handling<BR>EXCEPTION<BR>&nbsp;&nbsp;&nbsp; WHEN integrity_error THEN<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RAISE_APPLICATION_ERROR(errno, errmsg);<BR>END;</PRE><PRE class=programlisting></PRE><PRE class=programlisting><STRONG>测试：</STRONG></PRE><PRE class=programlisting>INSERT INTO BOOKING(date_made,price) VALUES(SYSDATE,22222);<BR>COMMIT;</PRE><PRE class=programlisting></PRE></PRE></PRE><img src ="http://www.blogjava.net/ahgf/aggbug/15505.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ahgf/" target="_blank">ahgf</a> 2005-10-14 11:24 <a href="http://www.blogjava.net/ahgf/archive/2005/10/14/15505.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>