﻿<?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-semovy-文章分类-JDBC</title><link>http://www.blogjava.net/WshmAndLily/category/10978.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 14 Feb 2008 17:19:59 GMT</lastBuildDate><pubDate>Thu, 14 Feb 2008 17:19:59 GMT</pubDate><ttl>60</ttl><item><title>java jdbc</title><link>http://www.blogjava.net/WshmAndLily/articles/179975.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Thu, 14 Feb 2008 13:35:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/179975.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/179975.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/179975.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/179975.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/179975.html</trackback:ping><description><![CDATA[<p>package com.semovy.service.impl;</p>
<p>import java.sql.Connection;<br />
import java.sql.DriverManager;<br />
import java.sql.ResultSet;<br />
import java.sql.ResultSetMetaData;<br />
import java.sql.SQLException;<br />
import java.sql.Statement;<br />
import java.util.List;</p>
<p>import com.semovy.bean.Database;</p>
<p>public class SQLServerDatabase implements Database {</p>
<p>&nbsp;private String driver = null;<br />
&nbsp;private String pwd = null;<br />
&nbsp;private String user = null;<br />
&nbsp;private String url = null;<br />
&nbsp;private Connection connection = null;<br />
&nbsp;public String getUrl() {<br />
&nbsp;&nbsp;return url;<br />
&nbsp;}<br />
&nbsp;public void setUrl(String url) {<br />
&nbsp;&nbsp;this.url = url;<br />
&nbsp;}<br />
&nbsp;public String getUser() {<br />
&nbsp;&nbsp;return user;<br />
&nbsp;}<br />
&nbsp;public void setUser(String user) {<br />
&nbsp;&nbsp;this.user = user;<br />
&nbsp;}<br />
&nbsp;public String getDriver() {<br />
&nbsp;&nbsp;return driver;<br />
&nbsp;}<br />
&nbsp;public String getPwd() {<br />
&nbsp;&nbsp;return pwd;<br />
&nbsp;}<br />
&nbsp;public void setDriver(String driver)<br />
&nbsp;{<br />
&nbsp;&nbsp;this.driver = driver;<br />
&nbsp;}<br />
&nbsp;public void setPwd(String pwd)<br />
&nbsp;{<br />
&nbsp;&nbsp;this.pwd = pwd;<br />
&nbsp;}<br />
&nbsp;public Connection getConnection()<br />
&nbsp;{<br />
&nbsp;&nbsp;openConnection();<br />
&nbsp;&nbsp;return this.connection;<br />
&nbsp;}<br />
&nbsp;public void setConnection(Connection connection) {<br />
&nbsp;&nbsp;this.connection = connection;<br />
&nbsp;}<br />
&nbsp;public List getData() {<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;return null;<br />
&nbsp;}<br />
&nbsp;public SQLServerDatabase(String driver,String url,String user,String pwd)<br />
&nbsp;{<br />
&nbsp;&nbsp;this.driver = driver;<br />
&nbsp;&nbsp;this.url = url;<br />
&nbsp;&nbsp;this.user = user;<br />
&nbsp;&nbsp;this.pwd = pwd;<br />
&nbsp;&nbsp;try<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;System.out.println("start");<br />
&nbsp;&nbsp;&nbsp;Class.forName(this.getDriver()).newInstance();<br />
&nbsp;&nbsp;&nbsp;this.connection = DriverManager.getConnection(this.getUrl(), this.getUser(), this.getPwd());<br />
&nbsp;&nbsp;&nbsp;System.out.println("OK");<br />
&nbsp;&nbsp;}catch(SQLException e)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;System.out.println(e.getLocalizedMessage());<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;catch(ClassNotFoundException e)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;System.out.println(e.getLocalizedMessage());<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;catch(Exception e)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;System.out.println(e.getLocalizedMessage());<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
&nbsp;/**<br />
&nbsp; * <br />
&nbsp; * @return<br />
&nbsp; */<br />
&nbsp;private Connection openConnection()<br />
&nbsp;{<br />
&nbsp;&nbsp;if(this.connection != null)<br />
&nbsp;&nbsp;{&nbsp;<br />
&nbsp;&nbsp;&nbsp;return this.connection;<br />
&nbsp;&nbsp;}&nbsp;<br />
&nbsp;&nbsp;else <br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;try<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;Class.forName(this.getDriver()).newInstance();<br />
&nbsp;&nbsp;&nbsp;&nbsp;this.connection = DriverManager.getConnection(this.getUrl(), this.getUser(), this.getPwd());<br />
&nbsp;&nbsp;&nbsp;}catch(SQLException e)<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(e.getLocalizedMessage());<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;catch(ClassNotFoundException e)<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(e.getLocalizedMessage());<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;catch(Exception e)<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(e.getLocalizedMessage());<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;return this.connection;&nbsp;<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;<br />
&nbsp;}<br />
&nbsp;public void closeConnection()<br />
&nbsp;{<br />
&nbsp;&nbsp;try<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;if(this.getConnection() != null &amp;&amp; !this.connection.isClosed())<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;this.connection.close();<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}catch(SQLException e)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;System.out.println(e.getLocalizedMessage());<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
&nbsp;public ResultSet executeQuery(String sqlExp)<br />
&nbsp;{<br />
&nbsp;&nbsp;ResultSet rs = null;<br />
&nbsp;&nbsp;Statement stmt = null;<br />
&nbsp;&nbsp;try<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;stmt = this.getConnection().createStatement();<br />
&nbsp;&nbsp;&nbsp;rs = stmt.executeQuery(sqlExp);<br />
&nbsp;&nbsp;}catch(SQLException e)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;System.out.println(e.getLocalizedMessage());<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;return rs;<br />
&nbsp;}<br />
&nbsp;public void executeUpdate(String sqlExp)<br />
&nbsp;{<br />
&nbsp;&nbsp;try<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;this.getConnection().createStatement().executeUpdate(sqlExp);<br />
&nbsp;&nbsp;}catch(SQLException e)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;System.out.println(e.getLocalizedMessage());<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
&nbsp;public void executeBatchUpdate()<br />
&nbsp;{<br />
&nbsp;&nbsp;try<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;long start = System.currentTimeMillis();<br />
&nbsp;&nbsp;&nbsp;Statement stmt = this.getConnection().createStatement();<br />
&nbsp;&nbsp;&nbsp;for(int i=0;i &lt; 10000;i++)<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;stmt.addBatch("insert into item values(2,'item" + i + "')");<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(i%500 == 0 &amp;&amp; i&gt;0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt.executeBatch();<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;stmt.executeBatch();<br />
&nbsp;&nbsp;&nbsp;this.getConnection().commit();<br />
&nbsp;&nbsp;&nbsp;stmt.close();<br />
&nbsp;&nbsp;&nbsp;stmt = null;<br />
&nbsp;&nbsp;&nbsp;long spendTime = System.currentTimeMillis() - start;<br />
&nbsp;&nbsp;&nbsp;System.out.println("向数据库插入一万条记录用去:" +&nbsp; spendTime*1.0/1000 + " s");<br />
&nbsp;&nbsp;}catch(SQLException e)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;System.out.println(e.getLocalizedMessage());<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
&nbsp;public void display(ResultSet rs)<br />
&nbsp;{<br />
&nbsp;&nbsp;try<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;ResultSetMetaData rsmd =&nbsp; rs.getMetaData();<br />
&nbsp;&nbsp;&nbsp;int colLen = rsmd.getColumnCount();<br />
&nbsp;&nbsp;&nbsp;while(rs.next())<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(int i=0; i&lt;colLen;i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(rsmd.getColumnName(i+1) + ": " + rs.getObject(i+1) + "&nbsp; ");<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println();<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;}catch(SQLException e)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;System.out.println(e.getLocalizedMessage());<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;<br />
&nbsp;}<br />
}<br />
<br />
<br />
<br />
</p>
<p>package com.semovy.test;</p>
<p>import com.semovy.service.impl.SQLServerDatabase;</p>
<p>public class TestHelloWorld {</p>
<p>&nbsp;public static void main(String[] args) {</p>
<p>&nbsp;&nbsp;// ApplicationContext appContext = new<br />
&nbsp;&nbsp;// FileSystemXmlApplicationContext("classpath:config.xml");<br />
&nbsp;&nbsp;// Hello hello = (Hello)appContext.getBean("hello");<br />
&nbsp;&nbsp;// hello.saySaluation();<br />
&nbsp;&nbsp;// IoC Inversion of Control 反向控制.<br />
&nbsp;&nbsp;// 发明者新命名为:DI dipendency Injection 依赖注入.<br />
&nbsp;&nbsp;// 反向控制是实现依赖抽象,不是抽象依赖实现.<br />
&nbsp;&nbsp;SQLServerDatabase sqlServerDB = new SQLServerDatabase(<br />
&nbsp;&nbsp;&nbsp;&nbsp;"com.microsoft.jdbc.sqlserver.SQLServerDriver", "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test",<br />
&nbsp;&nbsp;&nbsp;&nbsp;"sa", "1234");<br />
&nbsp;&nbsp;sqlServerDB.executeUpdate("drop table item if exist create table item(id int not null identity(1,1) primary key,int categoryId not null,itemName varchar(255) default '')");<br />
&nbsp;&nbsp;sqlServerDB.executeUpdate("delete from item");<br />
&nbsp;&nbsp;sqlServerDB.executeBatchUpdate();<br />
&nbsp;&nbsp;sqlServerDB.display(sqlServerDB.executeQuery("select top 100 * from item"));<br />
&nbsp;&nbsp;sqlServerDB.closeConnection();<br />
&nbsp;}</p>
<p>}</p>
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/179975.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2008-02-14 21:35 <a href="http://www.blogjava.net/WshmAndLily/articles/179975.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDBC存取ORACLE大型数据对象LOB几种情况的示范类</title><link>http://www.blogjava.net/WshmAndLily/articles/103592.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Tue, 13 Mar 2007 09:29:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/103592.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/103592.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/103592.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/103592.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/103592.html</trackback:ping><description><![CDATA[import java.io.*;<br />import java.util.*;<br />import java.sql.*;<br />  <br />public class LobPros<br />{<br />  <br />    /**<br />     * orACLE驱动程序<br />     */<br />    private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";<br />  <br />    /**<br />     * orACLE连接用URL<br />     */<br />    private static final String URL = "jdbc:oracle:thin:@test2000:1521:orac";<br />  <br />    /**<br />     * 用户名<br />     */<br />    private static final String USER = "user";<br />  <br />    /**<br />     * 密码<br />     */<br />    private static final String PASSWORD = "pswd";<br />  <br />    /**<br />     * 数据库连接<br />     */<br />    private static Connection conn = null;<br />  <br />    /**<br />     * SQL语句对象<br />     */<br />    private static Statement stmt = null;<br />  <br />    /**<br />     * @roseuid 3EDA089E02BC<br />     */<br />    public LobPros()<br />    {<br />  <br />    }<br />  <br />    /**<br />     * 往数据库中插入一个新的CLOB对象<br />     *<br />     * @param infile - 数据文件<br />     * @throws java.lang.Exception<br />     * @roseuid 3EDA04A902BC<br />     */<br />    public static void clobInsert(String infile) throws Exception<br />    {<br />        /* 设定不自动提交 */<br />        boolean defaultCommit = conn.getAutoCommit();<br />        conn.setAutoCommit(false);<br />  <br />        try {<br />            /* 插入一个空的CLOB对象 */<br />            stmt.executeUpdate("Insert INTO TEST_CLOB VALUES ('111', EMPTY_CLOB())");<br />            /* 查询此CLOB对象并锁定 */<br />            ResultSet rs = stmt.executeQuery("Select CLOBCOL FROM TEST_CLOB Where ID='111' FOR Update");<br />            while (rs.next()) {<br />                /* 取出此CLOB对象 */<br />                oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("CLOBCOL");<br />                /* 向CLOB对象中写入数据 */<br />                BufferedWriter out = new BufferedWriter(clob.getCharacterOutputStream());<br />                BufferedReader in = new BufferedReader(new FileReader(infile));<br />                int c;<br />                while ((c=in.read())!=-1) {<br />                    out.write(c);<br />                }<br />                in.close();<br />                out.close();<br />            }<br />            /* 正式提交 */<br />            conn.commit();<br />        } catch (Exception ex) {<br />            /* 出错回滚 */<br />            conn.rollback();<br />            throw ex;<br />        }<br />  <br />        /* 恢复原提交状态 */<br />        conn.setAutoCommit(defaultCommit);<br />    }<br />  <br />    /**<br />     * 修改CLOB对象（是在原CLOB对象基础上进行覆盖式的修改）<br />     *<br />     * @param infile - 数据文件<br />     * @throws java.lang.Exception<br />     * @roseuid 3EDA04B60367<br />     */<br />    public static void clobModify(String infile) throws Exception<br />    {<br />        /* 设定不自动提交 */<br />        boolean defaultCommit = conn.getAutoCommit();<br />        conn.setAutoCommit(false);<br />  <br />        try {<br />            /* 查询CLOB对象并锁定 */<br />            ResultSet rs = stmt.executeQuery("Select CLOBCOL FROM TEST_CLOB Where ID='111' FOR Update");<br />            while (rs.next()) {<br />                /* 获取此CLOB对象 */<br />                oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("CLOBCOL");  <br />                /* 进行覆盖式修改 */<br />                BufferedWriter out = new BufferedWriter(clob.getCharacterOutputStream());<br />                BufferedReader in = new BufferedReader(new FileReader(infile));<br />                int c;<br />                while ((c=in.read())!=-1) {<br />                    out.write(c);<br />                }<br />                in.close();<br />                out.close();<br />            }<br />            /* 正式提交 */<br />            conn.commit();<br />        } catch (Exception ex) {<br />            /* 出错回滚 */<br />            conn.rollback();<br />            throw ex;<br />        }<br />  <br />        /* 恢复原提交状态 */<br />        conn.setAutoCommit(defaultCommit);<br />    }<br />  <br />    /**<br />     * 替换CLOB对象（将原CLOB对象清除，换成一个全新的CLOB对象）<br />     *<br />     * @param infile - 数据文件<br />     * @throws java.lang.Exception<br />     * @roseuid 3EDA04BF01E1<br />     */<br />    public static void clobReplace(String infile) throws Exception<br />    {<br />        /* 设定不自动提交 */<br />        boolean defaultCommit = conn.getAutoCommit();<br />        conn.setAutoCommit(false);<br />  <br />        try {<br />            /* 清空原CLOB对象 */<br />            stmt.executeUpdate("Update TEST_CLOB SET CLOBCOL=EMPTY_CLOB() Where ID='111'");<br />            /* 查询CLOB对象并锁定 */<br />            ResultSet rs = stmt.executeQuery("Select CLOBCOL FROM TEST_CLOB Where ID='111' FOR Update");<br />            while (rs.next()) {<br />                /* 获取此CLOB对象 */<br />                oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("CLOBCOL");<br />                /* 更新数据 */<br />                BufferedWriter out = new BufferedWriter(clob.getCharacterOutputStream());<br />                BufferedReader in = new BufferedReader(new FileReader(infile));<br />                int c;<br />                while ((c=in.read())!=-1) {<br />                    out.write(c);<br />                }<br />                in.close();<br />                out.close();<br />            }<br />            /* 正式提交 */<br />            conn.commit();<br />        } catch (Exception ex) {<br />            /* 出错回滚 */<br />            conn.rollback();<br />            throw ex;<br />        }<br />  <br />        /* 恢复原提交状态 */<br />        conn.setAutoCommit(defaultCommit);<br />    }<br />  <br />    /**<br />     * CLOB对象读取<br />     *<br />     * @param outfile - 输出文件名<br />     * @throws java.lang.Exception<br />     * @roseuid 3EDA04D80116<br />     */<br />    public static void clobRead(String outfile) throws Exception<br />    {<br />        /* 设定不自动提交 */<br />        boolean defaultCommit = conn.getAutoCommit();<br />        conn.setAutoCommit(false);<br />  <br />        try {<br />            /* 查询CLOB对象 */<br />            ResultSet rs = stmt.executeQuery("Select * FROM TEST_CLOB Where ID='111'");<br />            while (rs.next()) {<br />                /* 获取CLOB对象 */<br />                oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("CLOBCOL");<br />                /* 以字符形式输出 */<br />                BufferedReader in = new BufferedReader(clob.getCharacterStream());<br />                BufferedWriter out = new BufferedWriter(new FileWriter(outfile));<br />                int c;<br />                while ((c=in.read())!=-1) {<br />                    out.write(c);<br />                }<br />                out.close();<br />                in.close();<br />            }<br />        } catch (Exception ex) {<br />            conn.rollback();<br />            throw ex;<br />        }<br />  <br />        /* 恢复原提交状态 */<br />        conn.setAutoCommit(defaultCommit);<br />    }<br />  <br />    /**<br />     * 向数据库中插入一个新的BLOB对象<br />     *<br />     * @param infile - 数据文件<br />     * @throws java.lang.Exception<br />     * @roseuid 3EDA04E300F6<br />     */<br />    public static void blobInsert(String infile) throws Exception<br />    {<br />        /* 设定不自动提交 */<br />        boolean defaultCommit = conn.getAutoCommit();<br />        conn.setAutoCommit(false);<br />  <br />        try {<br />            /* 插入一个空的BLOB对象 */<br />            stmt.executeUpdate("Insert INTO TEST_BLOB VALUES ('222', EMPTY_BLOB())");<br />            /* 查询此BLOB对象并锁定 */<br />            ResultSet rs = stmt.executeQuery("Select BLOBCOL FROM TEST_BLOB Where ID='222' FOR Update");<br />            while (rs.next()) {<br />                /* 取出此BLOB对象 */<br />                oracle.sql.BLOB blob = (oracle.sql.BLOB)rs.getBlob("BLOBCOL");<br />                /* 向BLOB对象中写入数据 */<br />                BufferedOutputStream out = new BufferedOutputStream(blob.getBinaryOutputStream());<br />                BufferedInputStream in = new BufferedInputStream(new FileInputStream(infile));<br />                int c;<br />                while ((c=in.read())!=-1) {<br />                    out.write(c);<br />                }<br />                in.close();<br />                out.close();<br />            }<br />            /* 正式提交 */<br />            conn.commit();<br />        } catch (Exception ex) {<br />            /* 出错回滚 */<br />            conn.rollback();<br />            throw ex;<br />        }<br />  <br />        /* 恢复原提交状态 */<br />        conn.setAutoCommit(defaultCommit);<br />    }<br />  <br />    /**<br />     * 修改BLOB对象（是在原BLOB对象基础上进行覆盖式的修改）<br />     *<br />     * @param infile - 数据文件<br />     * @throws java.lang.Exception<br />     * @roseuid 3EDA04E90106<br />     */<br />    public static void blobModify(String infile) throws Exception<br />    {<br />        /* 设定不自动提交 */<br />        boolean defaultCommit = conn.getAutoCommit();<br />        conn.setAutoCommit(false);<br />  <br />        try {<br />            /* 查询BLOB对象并锁定 */<br />            ResultSet rs = stmt.executeQuery("Select BLOBCOL FROM TEST_BLOB Where ID='222' FOR Update");<br />            while (rs.next()) {<br />                /* 取出此BLOB对象 */<br />                oracle.sql.BLOB blob = (oracle.sql.BLOB)rs.getBlob("BLOBCOL");<br />                /* 向BLOB对象中写入数据 */<br />                BufferedOutputStream out = new BufferedOutputStream(blob.getBinaryOutputStream());<br />                BufferedInputStream in = new BufferedInputStream(new FileInputStream(infile));<br />                int c;<br />                while ((c=in.read())!=-1) {<br />                    out.write(c);<br />                }<br />                in.close();<br />                out.close();<br />            }<br />            /* 正式提交 */<br />            conn.commit();<br />        } catch (Exception ex) {<br />            /* 出错回滚 */<br />            conn.rollback();<br />            throw ex;<br />        }<br />  <br />        /* 恢复原提交状态 */<br />        conn.setAutoCommit(defaultCommit);<br />    }<br />  <br />    /**<br />     * 替换BLOB对象（将原BLOB对象清除，换成一个全新的BLOB对象）<br />     *<br />     * @param infile - 数据文件<br />     * @throws java.lang.Exception<br />     * @roseuid 3EDA0505000C<br />     */<br />    public static void blobReplace(String infile) throws Exception<br />    {<br />        /* 设定不自动提交 */<br />        boolean defaultCommit = conn.getAutoCommit();<br />        conn.setAutoCommit(false);<br />  <br />        try {<br />            /* 清空原BLOB对象 */<br />            stmt.executeUpdate("Update TEST_BLOB SET BLOBCOL=EMPTY_BLOB() Where ID='222'");<br />            /* 查询此BLOB对象并锁定 */<br />            ResultSet rs = stmt.executeQuery("Select BLOBCOL FROM TEST_BLOB Where ID='222' FOR Update");<br />            while (rs.next()) {<br />                /* 取出此BLOB对象 */<br />                oracle.sql.BLOB blob = (oracle.sql.BLOB)rs.getBlob("BLOBCOL");<br />                /* 向BLOB对象中写入数据 */<br />                BufferedOutputStream out = new BufferedOutputStream(blob.getBinaryOutputStream());<br />                BufferedInputStream in = new BufferedInputStream(new FileInputStream(infile));<br />                int c;<br />                while ((c=in.read())!=-1) {<br />                    out.write(c);<br />                }<br />                in.close();<br />                out.close();<br />            }<br />            /* 正式提交 */<br />            conn.commit();<br />        } catch (Exception ex) {<br />            /* 出错回滚 */<br />            conn.rollback();<br />            throw ex;<br />        }<br />  <br />        /* 恢复原提交状态 */<br />        conn.setAutoCommit(defaultCommit);<br />    }<br />  <br />    /**<br />     * BLOB对象读取<br />     *<br />     * @param outfile - 输出文件名<br />     * @throws java.lang.Exception<br />     * @roseuid 3EDA050B003B<br />     */<br />    public static void blobRead(String outfile) throws Exception<br />    {<br />        /* 设定不自动提交 */<br />        boolean defaultCommit = conn.getAutoCommit();<br />        conn.setAutoCommit(false);<br />  <br />        try {<br />            /* 查询BLOB对象 */<br />            ResultSet rs = stmt.executeQuery("Select BLOBCOL FROM TEST_BLOB Where ID='222'");<br />            while (rs.next()) {<br />                /* 取出此BLOB对象 */<br />                oracle.sql.BLOB blob = (oracle.sql.BLOB)rs.getBlob("BLOBCOL");<br />                /* 以二进制形式输出 */<br />                BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(outfile));<br />                BufferedInputStream in = new BufferedInputStream(blob.getBinaryStream());<br />                int c;<br />                while ((c=in.read())!=-1) {<br />                    out.write(c);<br />                }<br />                in.close();<br />                out.close();<br />            }<br />            /* 正式提交 */<br />            conn.commit();<br />        } catch (Exception ex) {<br />            /* 出错回滚 */<br />            conn.rollback();<br />            throw ex;<br />        }<br />  <br />        /* 恢复原提交状态 */<br />        conn.setAutoCommit(defaultCommit);<br />    }<br />  <br />    /**<br />     * 建立测试用表格<br />     * @throws Exception<br />     */<br />    public static void createTables() throws Exception {<br />        try {<br />            stmt.executeUpdate("Create TABLE TEST_CLOB ( ID NUMBER(3), CLOBCOL CLOB)");<br />            stmt.executeUpdate("Create TABLE TEST_BLOB ( ID NUMBER(3), BLOBCOL BLOB)");<br />        } catch (Exception ex) {<br />  <br />        }<br />    }<br />  <br />    /**<br />     * @param args - 命令行参数<br />     * @throws java.lang.Exception<br />     * @roseuid 3EDA052002AC<br />     */<br />    public static void main(String[] args) throws Exception<br />    {<br />        /* 装载驱动,建立数据库连接 */<br />        Class.forName(DRIVER);<br />        conn = DriverManager.getConnection(URL,USER,PASSWORD);<br />        stmt = conn.createStatement();<br />  <br />        /* 建立测试表格 */<br />        createTables();<br />  <br />        /* CLOB对象插入测试 */<br />        clobInsert("c:/clobInsert.txt");<br />        clobRead("c:/clobInsert.out");<br />  <br />        /* CLOB对象修改测试 */<br />        clobModify("c:/clobModify.txt");<br />        clobRead("c:/clobModify.out");<br />  <br />        /* CLOB对象替换测试 */<br />        clobReplace("c:/clobReplace.txt");<br />        clobRead("c:/clobReplace.out");<br />  <br />        /* BLOB对象插入测试 */<br />        blobInsert("c:/blobInsert.doc");<br />        blobRead("c:/blobInsert.out");<br />  <br />        /* BLOB对象修改测试 */<br />        blobModify("c:/blobModify.doc");<br />        blobRead("c:/blobModify.out");<br />  <br />        /* BLOB对象替换测试 */<br />        blobReplace("c:/blobReplace.doc");<br />        blobRead("c:/bolbReplace.out");<br />  <br />        /* 关闭资源退出 */<br />        conn.close();<br />        System.exit(0);<br />    }<br />}<br /><img src ="http://www.blogjava.net/WshmAndLily/aggbug/103592.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2007-03-13 17:29 <a href="http://www.blogjava.net/WshmAndLily/articles/103592.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDBC连接各种数据库经验技巧集萃</title><link>http://www.blogjava.net/WshmAndLily/articles/75242.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Sun, 15 Oct 2006 03:31:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/75242.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/75242.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/75242.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/75242.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/75242.html</trackback:ping><description><![CDATA[Java数据库连接（JDBC）由一组用 Java 编程语言编写的类和接口组成。JDBC 为工具/数据库开发人员提供了一个标准的 API，使他们能够用纯Java API 来编写数据库应用程序。然而各个开发商的接口并不完全相同，所以开发环境的变化会带来一定的配置变化。本文主要集合了不同数据库的连接方式。<br /><br />　　<strong>一、连接各种数据库方式速查表<br /></strong><br />　　下面罗列了各种数据库使用JDBC连接的方式，可以作为一个手册使用。 <br /><br />　　<strong>1、Oracle8/8i/9i数据库（thin模式）</strong><br /><p class="code">Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); <br />String url="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl为数据库的SID <br />String user="test"; <br />String password="test"; <br />Connection conn= DriverManager.getConnection(url,user,password);</p><br /><br />　　<strong>2、DB2数据库</strong><br /><p class="code">Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance(); <br />String url="jdbc:db2://localhost:5000/sample"; //sample为你的数据库名 <br />String user="admin"; <br />String password=""; <br />Connection conn= DriverManager.getConnection(url,user,password);</p><br /><br />　　<strong>3、Sql Server7.0/2000数据库</strong><br /><p class="code">Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); <br />String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb"; <br />//mydb为数据库 <br />String user="sa"; <br />String password=""; <br />Connection conn= DriverManager.getConnection(url,user,password);</p><br /><br />　　<strong>4、Sybase数据库</strong><br /><p class="code">Class.forName("com.sybase.jdbc.SybDriver").newInstance(); <br />String url =" jdbc:sybase:Tds:localhost:5007/myDB";//myDB为你的数据库名 <br />Properties sysProps = System.getProperties(); <br />SysProps.put("user","userid"); <br />SysProps.put("password","user_password"); <br />Connection conn= DriverManager.getConnection(url, SysProps);<br /><br /><strong>5、Informix数据库</strong><br /></p><p class="code">Class.forName("com.informix.jdbc.IfxDriver").newInstance(); <br />String url = "jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver; <br />user=testuser;password=testpassword"; //myDB为数据库名 <br />Connection conn= DriverManager.getConnection(url);</p><p class="code"><br /><br />　　<strong>6、MySQL数据库</strong><br /></p><p class="code">Class.forName("org.gjt.mm.mysql.Driver").newInstance(); <br />String url ="jdbc:mysql://localhost/myDB?user=soft&amp;password=soft1234&amp;useUnicode=true&amp;characterEncoding=8859_1" <br />//myDB为数据库名 <br />Connection conn= DriverManager.getConnection(url);</p><p class="code"><br /><br />　　<strong>7、PostgreSQL数据库</strong><br /></p><p class="code">Class.forName("org.postgresql.Driver").newInstance(); <br />String url ="jdbc:postgresql://localhost/myDB" //myDB为数据库名 <br />String user="myuser"; <br />String password="mypassword"; <br />Connection conn= DriverManager.getConnection(url,user,password);</p><p class="code"><br /><br />　　<strong>8、access数据库直连用ODBC的<br /></strong></p><p class="code">Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ;<br />String url="jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ="+application.getRealPath("/Data/ReportDemo.mdb");<br />Connection conn = DriverManager.getConnection(url,"","");<br />Statement stmtNew=conn.createStatement() ;</p><p class="code"><br /><br />　　<strong>二、JDBC连接MySql方式</strong><br /><br />　　下面是使用JDBC连接MySql的一个小的教程 <br /><br />　　<strong>1、查找驱动程序</strong><br /><br />　　MySQL目前提供的java驱动程序为Connection/J，可以从MySQL官方网站下载，并找到mysql-connector-java-3.0.15-ga-bin.jar文件，此驱动程序为纯java驱动程序，不需做其他配置。<br /><br /><strong>2、动态指定classpath<br /><br /></strong>　　如果需要执行时动态指定classpath，就在执行时采用－cp方式。否则将上面的.jar文件加入到classpath环境变量中。<br /><br />　　<strong>3、加载驱动程序</strong><br /></p><p class="code">try{<br />　Class.forName(com.mysql.jdbc.Driver);<br />　System.out.println(Success loading Mysql Driver!);<br />}catch(Exception e)<br />{<br />　System.out.println(Error loading Mysql Driver!);<br />　e.printStackTrace();<br />}</p><p class="code"><br /><br />　　<strong>4、设置连接的url</strong><br /><br />jdbc：mysql：//localhost/databasename[?pa=va][＆pa=va] <br /><br />　　<strong>三、以下列出了在使用JDBC来连接Oracle数据库时可以使用的一些技巧</strong><br /><br />　　<strong>1、在客户端软件开发中使用Thin驱动程序</strong><br /><br />　　在开发Java软件方面，Oracle的数据库提供了四种类型的驱动程序，二种用于应用软件、applets、servlets等客户端软件，另外二种用于数据库中的Java存储过程等服务器端软件。在客户机端软件的开发中，我们可以选择OCI驱动程序或Thin驱动程序。OCI驱动程序利用Java本地化接口（JNI），通过Oracle客户端软件与数据库进行通讯。Thin驱动程序是纯Java驱动程序，它直接与数据库进行通讯。为了获得最高的性能，Oracle建议在客户端软件的开发中使用OCI驱动程序，这似乎是正确的。但我建议使用Thin驱动程序，因为通过多次测试发现，在通常情况下，Thin驱动程序的性能都超过了OCI驱动程序。<br /><br />　　<strong>2、关闭自动提交功能，提高系统性能</strong><br /><br />　　在第一次建立与数据库的连接时，在缺省情况下，连接是在自动提交模式下的。为了获得更好的性能，可以通过调用带布尔值false参数的Connection类的setAutoCommit()方法关闭自动提交功能，如下所示：<br /></p><p class="code">　　conn.setAutoCommit(false);</p><p class="code"><br />　　值得注意的是，一旦关闭了自动提交功能，我们就需要通过调用Connection类的commit()和rollback()方法来人工的方式对事务进行管理。<br /><br /><strong>3、在动态SQL或有时间限制的命令中使用Statement对象<br /><br /></strong>　　在执行SQL命令时，我们有二种选择：可以使用PreparedStatement对象，也可以使用Statement对象。无论多少次地使用同一个SQL命令，PreparedStatement都只对它解析和编译一次。当使用Statement对象时，每次执行一个SQL命令时，都会对它进行解析和编译。这可能会使你认为，使用PreparedStatement对象比使用Statement对象的速度更快。然而，我进行的测试表明，在客户端软件中，情况并非如此。因此，在有时间限制的SQL操作中，除非成批地处理SQL命令，我们应当考虑使用Statement对象。<br /><br />　　此外，使用Statement对象也使得编写动态SQL命令更加简单，因为我们可以将字符串连接在一起，建立一个有效的SQL命令。因此，我认为，Statement对象可以使动态SQL命令的创建和执行变得更加简单。<br /><br />　　<strong>4、利用helper函数对动态SQL命令进行格式化</strong><br /><br />　　在创建使用Statement对象执行的动态SQL命令时，我们需要处理一些格式化方面的问题。例如，如果我们想创建一个将名字O'Reilly插入表中的SQL命令，则必须使用二个相连的“''”号替换O'Reilly中的“'”号。完成这些工作的最好的方法是创建一个完成替换操作的helper方法，然后在连接字符串心服用公式表达一个SQL命令时，使用创建的helper方法。与此类似的是，我们可以让helper方法接受一个Date型的值，然后让它输出基于Oracle的to_date()函数的字符串表达式。<br /><br />　　<strong>5、利用PreparedStatement对象提高数据库的总体效率</strong><br /><br />　　在使用PreparedStatement对象执行SQL命令时，命令被数据库进行解析和编译，然后被放到命令缓冲区。然后，每当执行同一个PreparedStatement对象时，它就会被再解析一次，但不会被再次编译。在缓冲区中可以发现预编译的命令，并且可以重新使用。在有大量用户的企业级应用软件中，经常会重复执行相同的SQL命令，使用PreparedStatement对象带来的编译次数的减少能够提高数据库的总体性能。如果不是在客户端创建、预备、执行PreparedStatement任务需要的时间长于Statement任务，我会建议在除动态SQL命令之外的所有情况下使用PreparedStatement对象。<br /><br />　　<strong>6、在成批处理重复的插入或更新操作中使用PreparedStatement对象</strong><br /><br />　　如果成批地处理插入和更新操作，就能够显著地减少它们所需要的时间。Oracle提供的Statement和 CallableStatement并不真正地支持批处理，只有PreparedStatement对象才真正地支持批处理。我们可以使用addBatch()和executeBatch()方法选择标准的JDBC批处理，或者通过利用PreparedStatement对象的setExecuteBatch()方法和标准的executeUpdate()方法选择速度更快的Oracle专有的方法。要使用Oracle专有的批处理机制，可以以如下所示的方式调用setExecuteBatch()：<br /></p><p class="code">PreparedStatement pstmt3D null;<br />try {<br />　((OraclePreparedStatement)pstmt).setExecuteBatch(30);<br />　...<br />　pstmt.executeUpdate();<br />}</p><p class="code"><br />　　调用setExecuteBatch()时指定的值是一个上限，当达到该值时，就会自动地引发SQL命令执行，标准的executeUpdate()方法就会被作为批处理送到数据库中。我们可以通过调用PreparedStatement类的sendBatch()方法随时传输批处理任务。<br /><br /><strong>7、使用Oracle locator方法插入、更新大对象（LOB）<br /><br /></strong>　　Oracle的PreparedStatement类不完全支持BLOB和CLOB等大对象的处理，尤其是Thin驱动程序不支持利用PreparedStatement对象的setObject()和setBinaryStream()方法设置BLOB的值，也不支持利用setCharacterStream()方法设置CLOB的值。只有locator本身中的方法才能够从数据库中获取LOB类型的值。可以使用PreparedStatement对象插入或更新LOB，但需要使用locator才能获取LOB的值。由于存在这二个问题，因此，我建议使用locator的方法来插入、更新或获取LOB的值。<br /><br />　　<strong>8、使用SQL92语法调用存储过程</strong><br /><br />　　在调用存储过程时，我们可以使用SQL92或Oracle PL/SQL，由于使用Oracle PL/SQL并没有什么实际的好处，而且会给以后维护你的应用程序的开发人员带来麻烦，因此，我建议在调用存储过程时使用SQL92。<br /><br />　　<strong>9、使用Object SQL将对象模式转移到数据库中</strong><br /><br />　　既然可以将Oracle的数据库作为一种面向对象的数据库来使用，就可以考虑将应用程序中的面向对象模式转到数据库中。目前的方法是创建Java bean作为伪装的数据库对象，将它们的属性映射到关系表中，然后在这些bean中添加方法。尽管这样作在Java中没有什么问题，但由于操作都是在数据库之外进行的，因此其他访问数据库的应用软件无法利用对象模式。如果利用Oracle的面向对象的技术，可以通过创建一个新的数据库对象类型在数据库中模仿其数据和操作，然后使用JPublisher等工具生成自己的Java bean类。如果使用这种方式，不但Java应用程序可以使用应用软件的对象模式，其他需要共享你的应用中的数据和操作的应用软件也可以使用应用软件中的对象模式。<br /><br />　　<strong>10、利用SQL完成数据库内的操作</strong><br /><br />　　我要向大家介绍的最重要的经验是充分利用SQL的面向集合的方法来解决数据库处理需求，而不是使用Java等过程化的编程语言。<br /><br />　　如果编程人员要在一个表中查找许多行，结果中的每个行都会查找其他表中的数据，最后，编程人员创建了独立的UPDATE命令来成批地更新第一个表中的数据。与此类似的任务可以通过在set子句中使用多列子查询而在一个UPDATE命令中完成。当能够在单一的SQL命令中完成任务，何必要让数据在网上流来流去的？我建议用户认真学习如何最大限度地发挥SQL的功能。 </p><img src ="http://www.blogjava.net/WshmAndLily/aggbug/75242.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2006-10-15 11:31 <a href="http://www.blogjava.net/WshmAndLily/articles/75242.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>