﻿<?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-Java天空</title><link>http://www.blogjava.net/kemi84/</link><description /><language>zh-cn</language><lastBuildDate>Thu, 07 May 2026 09:27:25 GMT</lastBuildDate><pubDate>Thu, 07 May 2026 09:27:25 GMT</pubDate><ttl>60</ttl><item><title>基础：Java数据库编程中的几个常用技巧(出处:赛迪网;作者: 执木)</title><link>http://www.blogjava.net/kemi84/archive/2008/05/18/201259.html</link><dc:creator>可米</dc:creator><author>可米</author><pubDate>Sun, 18 May 2008 08:27:00 GMT</pubDate><guid>http://www.blogjava.net/kemi84/archive/2008/05/18/201259.html</guid><wfw:comment>http://www.blogjava.net/kemi84/comments/201259.html</wfw:comment><comments>http://www.blogjava.net/kemi84/archive/2008/05/18/201259.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kemi84/comments/commentRss/201259.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kemi84/services/trackbacks/201259.html</trackback:ping><description><![CDATA[<p dir="ltr"><br />
1、java数据库操作基本流程 </p>
<p>　　2、几个常用的重要技巧：</p>
<p>　　可滚动、更新的记录集</p>
<p>　　批量更新</p>
<p>　　事务处理</p>
<p>　　java数据库操作基本流程：取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接</p>
<p><strong>　　1、取得数据库连接</strong></p>
<p>　　1)用DriverManager取数据库连接</p>
<p>　　例子：　　
<table style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">String&nbsp;className,url,uid,pwd; <br />
            　　className&nbsp;=&nbsp;"oracle.jdbc.driver.OracleDriver"; <br />
            　　url&nbsp;=&nbsp;"jdbc:oracle:thin:@127.0.0.1:1521:orasvr; <br />
            　　uid&nbsp;=&nbsp;"system"; <br />
            　　pwd&nbsp;=&nbsp;"manager"; <br />
            　　Class.forName(className); <br />
            　　Connection&nbsp;cn&nbsp;=&nbsp;DriverManager.getConnection(url,uid,pwd); <br />
            　　2)用jndi(java的命名和目录服务)方式</td>
        </tr>
    </tbody>
</table>
　　例子　　
<table style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3"><br />
            String&nbsp;jndi&nbsp;=&nbsp;"jdbc/db"; <br />
            　　Context&nbsp;ctx&nbsp;=&nbsp;(Context)&nbsp;new&nbsp;InitialContext().lookup("java:comp/env"); <br />
            　　DataSource&nbsp;ds&nbsp;=&nbsp;(DataSource)&nbsp;ctx.lookup(jndi); <br />
            　　Connection&nbsp;cn&nbsp;=&nbsp;ds.getConnection();</td>
        </tr>
    </tbody>
</table>
　　多用于jsp中</p>
<p><strong>　　2、执行sql语句</strong></p>
<p>　　1)用Statement来执行sql语句　</p>
<p>
<table style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">　String&nbsp;sql; <br />
            　　Statement&nbsp;sm&nbsp;=&nbsp;cn.createStatement(); <br />
            　　sm.executeQuery(sql);&nbsp;//&nbsp;执行数据查询语句(select) <br />
            　　sm.executeUpdate(sql);&nbsp;//&nbsp;执行数据更新语句(delete、update、insert、drop等)statement.close();</td>
        </tr>
    </tbody>
</table>
</p>
<p>　　2)用PreparedStatement来执行sql语句　　</p>
<p>
<table style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">String&nbsp;sql; <br />
            　　sql&nbsp;=&nbsp;"insert&nbsp;into&nbsp;user&nbsp;(id,name)&nbsp;values&nbsp;(?,?)"; <br />
            　　PreparedStatement&nbsp;ps&nbsp;=&nbsp;cn.prepareStatement(sql); <br />
            　　ps.setInt(1,xxx); <br />
            　　ps.setString(2,xxx); <br />
            　　... <br />
            　　ResultSet&nbsp;rs&nbsp;=&nbsp;ps.executeQuery();&nbsp;//&nbsp;查询 <br />
            　　int&nbsp;c&nbsp;=&nbsp;ps.executeUpdate();&nbsp;//&nbsp;更新</td>
        </tr>
    </tbody>
</table>
</p>
<p><strong>3、处理执行结果</strong></p>
<p>　　查询语句，返回记录集ResultSet。</p>
<p>　　更新语句，返回数字，表示该更新影响的记录数。</p>
<p>　　ResultSet的方法：</p>
<p>　　1、next()，将游标往后移动一行，如果成功返回true;否则返回false。</p>
<p>　　2、getInt("id")或getSting("name")，返回当前游标下某个字段的值。</p>
<p>　　3、释放连接。</p>
<p>　　cn.close();</p>
<p>　　一般，先关闭ResultSet，然后关闭Statement(或者PreparedStatement);最后关闭Connection</p>
<p>　　可滚动、更新的记录集</p>
<p>　　1、创建可滚动、更新的Statement　　
<table style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">Statement&nbsp;sm&nbsp;=&nbsp;cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY);</td>
        </tr>
    </tbody>
</table>
　　该Statement取得的ResultSet就是可滚动的</p>
<p>　　2、创建PreparedStatement时指定参数　　
<table style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">PreparedStatemet&nbsp;ps&nbsp;=&nbsp;cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); <br />
            　　ResultSet.absolute(9000);</td>
        </tr>
    </tbody>
</table>
　　批量更新　　
<table style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">1、Statement <br />
            　　Statement&nbsp;sm&nbsp;=&nbsp;cn.createStatement(); <br />
            　　sm.addBatch(sql1); <br />
            　　sm.addBatch(sql2); <br />
            　　... <br />
            　　sm.executeBatch()</td>
        </tr>
    </tbody>
</table>
　　一个Statement对象，可以执行多个sql语句以后，批量更新。这多个语句可以是delete、update、insert等或兼有</p>
<p>　　2、PreparedStatement　　
<table style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">PreparedStatement&nbsp;ps&nbsp;=&nbsp;cn.preparedStatement(sql); <br />
            　　{ <br />
            　　ps.setXXX(1,xxx); <br />
            　　... <br />
            　　ps.addBatch(); <br />
            　　} <br />
            　　ps.executeBatch();</td>
        </tr>
    </tbody>
</table>
　　一个PreparedStatement，可以把一个sql语句，变换参数多次执行，一次更新。</p>
<p>　　事务的处理</p>
<p>　　1、关闭Connection的自动提交</p>
<p>　　cn.setAutoCommit(false);</p>
2、执行一系列sql语句
<p>　　要点：执行每一个新的sql语句前，上一次执行sql语句的Statement(或者PreparedStatemet)必须先close　　
<table style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">Statement&nbsp;sm&nbsp;; <br />
            　　sm&nbsp;=&nbsp;cn.createStatement(insert&nbsp;into&nbsp;user...); <br />
            　　sm.executeUpdate(); <br />
            　　sm.close(); <br />
            　　sm&nbsp;=&nbsp;cn.createStatement("insert&nbsp;into&nbsp;corp...); <br />
            　　sm.executeUpdate(); <br />
            　　sm.close(); <br />
            　　3、提交 <br />
            　　cn.commit();</td>
        </tr>
    </tbody>
</table>
　　4、如果发生异常，那么回滚</p>
<p>　　cn.rollback();</p>
<img src ="http://www.blogjava.net/kemi84/aggbug/201259.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kemi84/" target="_blank">可米</a> 2008-05-18 16:27 <a href="http://www.blogjava.net/kemi84/archive/2008/05/18/201259.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>