社区应用 最新帖子 精华区 社区服务 会员列表 统计排行 社区论坛任务 迷你宠物
  • 11306阅读
  • 1回复

[JAVA]java 数据库基本操作

t_y
级别: 经院硕士
发帖
2080
铜板
4671
人品值
2716
贡献值
3
交易币
0
好评度
2087
信誉值
0
金币
0
所在楼道
java 数据库基本操作 K\,)9:`t  
1、java数据库操作基本流程 l _dWS9  
2、几个常用的重要技巧: ;mjk`6p  
    可滚动、更新的记录集 es6!p 7p?  
    批量更新 'W@X139zq  
    事务处理 jL<:N 8  
9B{,q6  
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 bd5\Rt  
1、取得数据库连接 `gDpb.=Y  
  1)用DriverManager取数据库连接 C-V,3}=*2  
  例子 kD8$ir'UYG  
    String className,url,uid,pwd; xVf AlN37(  
    className = "oracle.jdbc.driver.OracleDriver"; @/9#Z4&d0  
    url      = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; =e$<[ "  
    uid      = "system"; 0r*E$|zZ  
    pwd      = "manager"; |k\4\a Lj  
    Class.forName(className); 04D>h0yFf  
    Connection cn = DriverManager.getConnection(url,uid,pwd); )+OI}  
  2)用jndi(java的命名和目录服务)方式 ;}@.E@s%'  
  例子 nQy.?*X  
    String jndi = "jdbc/db"; =8?y$WE  
    Context ctx = (Context) new InitialContext().lookup("java:comp/env"); iVTC"v  
    DataSource ds = (DataSource) ctx.lookup(jndi); ZX'q-JUv f  
    Connection cn = ds.getConnection(); A<fKO <d  
  多用于jsp中 ZVs]_`(+  
2、执行sql语句 o$;t  
  1)用Statement来执行sql语句 sEkfmB2J/  
  String sql; %UT5KYd!=N  
  Statement sm = cn.createStatement(); -d1 YG[1|  
  sm.executeQuery(sql); // 执行数据查询语句(select) z6)b XL[f  
  sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); x=DxD&I!J  
  2)用PreparedStatement来执行sql语句 K#OL/2^ 5  
  String sql; h@ lz  
  sql  = "insert into user (id,name) values (?,?)"; kY]"3a  
  PreparedStatement ps = cn.prepareStatement(sql); Mq0MtC6-  
  ps.setInt(1,xxx); :E")Zw&sW3  
  ps.setString(2,xxx); :rb;*nY!  
  ... sC3Vj(d!i  
  ResultSet rs = ps.executeQuery(); // 查询 w9|x{B  
  int c = ps.executeUpdate(); // 更新 }b1G21Dc!  
  T1Py6Q,-  
3、处理执行结果 _HwA%=>7  
  查询语句,返回记录集ResultSet IHEbT   
  更新语句,返回数字,表示该更新影响的记录数 #L.,aTA<  
  ResultSet的方法 (G|!{  
  1、next(),将游标往后移动一行,如果成功返回true;否则返回false _[[0rn$  
  2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 m7k }k)  
  UBL{3s^"  
4、释放连接 $OZ= L  
  cn.close(); h7Uj "qH  
  一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection iy~h|YK;  
sK#) k\w>  
可滚动、更新的记录集 Zu"qTJE/1  
1、创建可滚动、更新的Statement WOn53|GQK  
  Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); {F<0e^*  
  该Statement取得的ResultSet就是可滚动的 WaB0?jI  
2、创建PreparedStatement时指定参数 HO<|EH~lu  
  PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); |:C0_`M9  
  ResultSet.absolute(9000);  uGZGI;9f4  
批量更新 ]$2 yV&V&  
1、Statement mh8fJ6j29N  
  Statement sm = cn.createStatement(); gY7sf1\wX  
  sm.addBatch(sql1); l>;hQh  
  sm.addBatch(sql2); 4`8s]X  
  ... lrJV"H  
  sm.executeBatch() H~yHSm 3  
  一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 Q\4tzb]  
2、PreparedStatement pFH.beY  
  PreparedStatement ps = cn.preparedStatement(sql); OB.rETg  
  { AO5&Y.A#  
  ps.setXXX(1,xxx); )p>Cf_[.  
  ... 9`Qa/Y!  
  ps.addBatch(); Md4Q.8  
  } XncX2E4E  
  ps.executeBatch(); l<1zLA~G  
  一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 LM eI[Ji  
  AZ(zM.y!#_  
事务的处理 8=$XhC  
1、关闭Connection的自动提交 }<~(9_+  
  cn.setAutoCommit(false); l :{q I#Q  
2、执行一系列sql语句 XMS:F]HN  
  要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close jOT/|k  
Statement sm ; {_b2!!p  
sm = cn.createStatement(insert into user...); Y/J~M$9P,  
sm.executeUpdate(); vu)EB!%[  
sm.close(); E"'u2jEG^  
sm = cn.createStatement("insert into corp...); 9 C)VW  
sm.executeUpdate();  el2Wk@*  
sm.close(); B:X%k/{  
3、提交 sg=G<50i  
  cn.commit(); JOG- i  
4、如果发生异常,那么回滚 G2N0'R "  
  cn.rollback();
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
出来混 迟早都要还
级别: 终身会员
发帖
3743
铜板
8
人品值
493
贡献值
9
交易币
0
好评度
3746
信誉值
0
金币
0
所在楼道
只看该作者 1 发表于: 2007-10-09
好久没用过JDBC连数据库了  习惯Hibernate ibatis和Toplink
描述
快速回复

您目前还是游客,请 登录 或 注册
如果您在写长篇帖子又不马上发表,建议存为草稿
认证码:
验证问题:
3+5=?,请输入中文答案:八 正确答案:八