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

[JAVA]java 数据库基本操作

t_y
级别: 经院硕士
发帖
2080
铜板
4671
人品值
2716
贡献值
3
交易币
0
好评度
2087
信誉值
0
金币
0
所在楼道
java 数据库基本操作 "aH]4DO  
1、java数据库操作基本流程 )^3655mb  
2、几个常用的重要技巧: _3JTHf<+  
    可滚动、更新的记录集 CKx}.<_  
    批量更新 6 d6SP)|j  
    事务处理 zh#uwT1u  
)]Rr:i9n  
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 *GnO&&m'B  
1、取得数据库连接 &Kwt vUN{  
  1)用DriverManager取数据库连接 XS@6jbLE  
  例子 A}O9e  
    String className,url,uid,pwd; +[qy HTcG  
    className = "oracle.jdbc.driver.OracleDriver"; #{PNdINoU  
    url      = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; SJe;T  
    uid      = "system"; Nzt1JHRS  
    pwd      = "manager"; SesO$=y  
    Class.forName(className); Ml ^Tb#  
    Connection cn = DriverManager.getConnection(url,uid,pwd); w Nnb@  
  2)用jndi(java的命名和目录服务)方式 o$;x[US  
  例子 6jA Q  
    String jndi = "jdbc/db"; 4,8 =[  
    Context ctx = (Context) new InitialContext().lookup("java:comp/env"); j'cS_R  
    DataSource ds = (DataSource) ctx.lookup(jndi); 1NJ|%+I  
    Connection cn = ds.getConnection(); ~d]7 Cl  
  多用于jsp中 jeNEC&J  
2、执行sql语句 Er`PYE J  
  1)用Statement来执行sql语句 vN+!l3O  
  String sql;  }2"k:-g  
  Statement sm = cn.createStatement(); 7 |A,GH  
  sm.executeQuery(sql); // 执行数据查询语句(select) y+<HS]vyV  
  sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); n_Dhq(.  
  2)用PreparedStatement来执行sql语句 ;anG F0x  
  String sql; |M&/( 0  
  sql  = "insert into user (id,name) values (?,?)"; -tJ*F!w6U  
  PreparedStatement ps = cn.prepareStatement(sql); Z]CH8GS~<  
  ps.setInt(1,xxx); h[?28q$  
  ps.setString(2,xxx); +/'jX?7x%  
  ... +g&W423k_  
  ResultSet rs = ps.executeQuery(); // 查询 jHzb,&  
  int c = ps.executeUpdate(); // 更新 "a7d`l:  
  :7zI!edu  
3、处理执行结果 64cmv}d_  
  查询语句,返回记录集ResultSet ;2~Q97c0  
  更新语句,返回数字,表示该更新影响的记录数 ,GlK_-6>  
  ResultSet的方法 f #14%?/  
  1、next(),将游标往后移动一行,如果成功返回true;否则返回false V2X(f6v  
  2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 -fv.ByyA  
  *!kg@ _0K  
4、释放连接 sa($3`d  
  cn.close(); * bK@A2`  
  一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection ,# 6\:i  
* G4;  
可滚动、更新的记录集 0v?,:]A0E  
1、创建可滚动、更新的Statement ,v+SD\7|  
  Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); WfVie6  
  该Statement取得的ResultSet就是可滚动的 Z^ 3Risi  
2、创建PreparedStatement时指定参数 [z9i v~  
  PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); ?CC6/bE-{  
  ResultSet.absolute(9000);  TMrmyvv  
批量更新 OZD/t(4?6s  
1、Statement pOXEM1"2A  
  Statement sm = cn.createStatement(); W*2SlS7  
  sm.addBatch(sql1); ' wEP:}  
  sm.addBatch(sql2); ]n_A~Y r  
  ... jEadVM9  
  sm.executeBatch() [ 0Sd +{Q  
  一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 i`X{pEKP+  
2、PreparedStatement f~Su F,o@h  
  PreparedStatement ps = cn.preparedStatement(sql); O(VV-n7U  
  { jn'8F$GU  
  ps.setXXX(1,xxx); z&8#1'  
  ... "Q( 8FF  
  ps.addBatch(); pWqahrWh  
  } SzDi= lY  
  ps.executeBatch(); *SZ<ori  
  一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 e;$s{CNo  
  xnTky1zq  
事务的处理 *4bV8T>0Z  
1、关闭Connection的自动提交 *!/9?M{p  
  cn.setAutoCommit(false); ScD9Ct*):C  
2、执行一系列sql语句 ,~!lNyL  
  要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close D+U^ pl-  
Statement sm ; FVHL;J]nf1  
sm = cn.createStatement(insert into user...); 7RZ7q@@fgh  
sm.executeUpdate(); h ? M0@Z  
sm.close(); AWzpk }\  
sm = cn.createStatement("insert into corp...); :c>,=FUT  
sm.executeUpdate(); F&Gb[Q&a8  
sm.close(); /"U<0jot  
3、提交 q)/4i9  
  cn.commit(); )L?Tq"hy  
4、如果发生异常,那么回滚 Z=xrj E  
  cn.rollback();
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

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

您目前还是游客,请 登录注册
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
认证码:
验证问题:
10+5=?,请输入中文答案:十五