﻿<?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/human2008/category/28873.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 10 Jan 2008 09:34:54 GMT</lastBuildDate><pubDate>Thu, 10 Jan 2008 09:34:54 GMT</pubDate><ttl>60</ttl><item><title>java 数据库基本操作 </title><link>http://www.blogjava.net/human2008/archive/2008/01/10/174222.html</link><dc:creator>灵!</dc:creator><author>灵!</author><pubDate>Thu, 10 Jan 2008 03:37:00 GMT</pubDate><guid>http://www.blogjava.net/human2008/archive/2008/01/10/174222.html</guid><wfw:comment>http://www.blogjava.net/human2008/comments/174222.html</wfw:comment><comments>http://www.blogjava.net/human2008/archive/2008/01/10/174222.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/human2008/comments/commentRss/174222.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/human2008/services/trackbacks/174222.html</trackback:ping><description><![CDATA[java <a href="http://www.zhujiangroad.com/price/soft_sql.html" target="_blank"><font color="#0000ff">数据库</font></a>基本操作
<p>　　1、java<a href="http://www.zhujiangroad.com/price/soft_sql.html" target="_blank"><font color="#0000ff">数据库</font></a>操作基本流程</p>
<p>　　2、几个常用的重要技巧：</p>
<p>　　&#183;可滚动、更新的记录集</p>
<p>　　&#183;批量更新</p>
<p>　　&#183;事务处理</p>
<p>　　java<a href="http://www.zhujiangroad.com/price/soft_sql.html" target="_blank"><font color="#0000ff">数据库</font></a>操作基本流程：取得<a href="http://www.zhujiangroad.com/price/soft_sql.html" target="_blank"><font color="#0000ff">数据库</font></a>连接 - 执行sql语句 - 处理执行结果 - 释放<a href="http://www.zhujiangroad.com/price/soft_sql.html" target="_blank"><font color="#0000ff">数据库</font></a>连接</p>
<p>　　<strong>1、取得<a href="http://www.zhujiangroad.com/price/soft_sql.html" target="_blank"><font color="#0000ff">数据库</font></a>连接</strong></p>
<p>　　1)用DriverManager取<a href="http://www.zhujiangroad.com/price/soft_sql.html" target="_blank"><font color="#0000ff">数据库</font></a>连接</p>
<p>　　例子</p>
<p>　　String className,url,uid,pwd;</p>
<p>　　className = "oracle.jdbc.driver.<a href="http://www.zhujiangroad.com/program/Oracle.html" target="_blank"><font color="#0000ff">Oracle</font></a>Driver";</p>
<p>　　url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr;</p>
<p>　　uid = "system";</p>
<p>　　pwd = "manager";</p>
<p>　　Class.forName(className);</p>
<p>　　Connection cn = DriverManager.getConnection(url,uid,pwd);</p>
<p>　　2)用jndi(java的命名和目录服务)方式</p>
<p>　　例子</p>
<p>　　String jndi = "jdbc/db";</p>
<p>　　Context ctx = (Context) new InitialContext().lookup("java:comp/env");</p>
<p>　　DataSource ds = (DataSource) ctx.lookup(jndi);</p>
<p>　　Connection cn = ds.getConnection();</p>
<p>　　多用于jsp中</p>
<p>　　<strong>2、执行sql语句</strong></p>
<p>　　1)用Statement来执行sql语句</p>
<p>　　String sql;</p>
<p>　　Statement sm = cn.createStatement();</p>
<p>　　sm.executeQuery(sql); // 执行数据查询语句(select)</p>
<p>　　sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close();</p>
<p>　　2)用PreparedStatement来执行sql语句</p>
<p>　　String sql;</p>
<p>　　sql = "insert into user (id,name) values (?,?)";</p>
<p>　　PreparedStatement ps = cn.prepareStatement(sql);</p>
<p>　　ps.setInt(1,xxx);</p>
<p>　　ps.setString(2,xxx);</p>
<p>　　...</p>
<p>　　ResultSet rs = ps.executeQuery(); // 查询</p>
<p>　　int c = ps.executeUpdate(); // 更新</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>　　<strong>4、释放连接</strong></p>
<p>　　cn.close();</p>
<p>　　一般，先关闭ResultSet，然后关闭Statement(或者PreparedStatement);最后关闭Connection</p>
<p>　　可滚动、更新的记录集</p>
<p>　　1、创建可滚动、更新的Statement</p>
<p>　　Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY);</p>
<p>　　该Statement取得的ResultSet就是可滚动的</p>
<p>　　2、创建PreparedStatement时指定参数</p>
<p>　　PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);</p>
<p>　　ResultSet.absolute(9000);</p>
<p>　　&#183;批量更新</p>
<p>　　1、Statement</p>
<p>　　Statement sm = cn.createStatement();</p>
<p>　　sm.addBatch(sql1);</p>
<p>　　sm.addBatch(sql2);</p>
<p>　　...</p>
<p>　　sm.executeBatch()</p>
<p>　　一个Statement对象，可以执行多个sql语句以后，批量更新。这多个语句可以是delete、update、insert等或兼有</p>
<p>　　2、PreparedStatement</p>
<p>　　PreparedStatement ps = cn.preparedStatement(sql);</p>
<p>　　{</p>
<p>　　ps.setXXX(1,xxx);</p>
<p>　　...</p>
<p>　　ps.addBatch();</p>
<p>　　}</p>
<p>　　ps.executeBatch();</p>
<p>　　一个PreparedStatement，可以把一个sql语句，变换参数多次执行，一次更新。</p>
<p>　　&#183;事务的处理</p>
<p>　　1、关闭Connection的自动提交</p>
<p>　　cn.setAutoCommit(false);</p>
<p>　　2、执行一系列sql语句</p>
<p>　　要点：执行每一个新的sql语句前，上一次执行sql语句的Statement(或者PreparedStatemet)必须先close</p>
<p>　　Statement sm ;</p>
<p>　　sm = cn.createStatement(insert into user...);</p>
<p>　　sm.executeUpdate();</p>
<p>　　sm.close();</p>
<p>　　sm = cn.createStatement("insert into corp...);</p>
<p>　　sm.executeUpdate();</p>
<p>　　sm.close();</p>
<p>　　3、提交</p>
<p>　　cn.commit();</p>
<p>　　4、如果发生异常，那么回滚</p>
<p>　　cn.rollback();</p>
<img src ="http://www.blogjava.net/human2008/aggbug/174222.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/human2008/" target="_blank">灵!</a> 2008-01-10 11:37 <a href="http://www.blogjava.net/human2008/archive/2008/01/10/174222.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>