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

[JAVA]java 数据库基本操作

t_y
级别: 经院硕士
发帖
2080
铜板
4671
人品值
2716
贡献值
3
交易币
0
好评度
2087
信誉值
0
金币
0
所在楼道
java 数据库基本操作 j}8IT  
1、java数据库操作基本流程 gUDd2T#  
2、几个常用的重要技巧: 0 O4'Ts ?  
    可滚动、更新的记录集 9m 56oT'U{  
    批量更新 "hz(A.THi  
    事务处理 s<0yQ-=.?N  
Vja' :i  
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 FVLXq0<Cj  
1、取得数据库连接 L]0+ u\(  
  1)用DriverManager取数据库连接 IDBhhv3ak  
  例子 jM J[6qj  
    String className,url,uid,pwd; M0o=bYI  
    className = "oracle.jdbc.driver.OracleDriver"; Y%qhgzz?/  
    url      = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; ZTd_EY0q  
    uid      = "system"; pfg"6P  
    pwd      = "manager"; en7i})v\".  
    Class.forName(className); H^"BK-`hs  
    Connection cn = DriverManager.getConnection(url,uid,pwd); D+rDgrv  
  2)用jndi(java的命名和目录服务)方式 ~bT0gIc  
  例子 hXS'*vO"  
    String jndi = "jdbc/db"; bf3LNV|  
    Context ctx = (Context) new InitialContext().lookup("java:comp/env"); Q3%a=ba)h  
    DataSource ds = (DataSource) ctx.lookup(jndi); 9<<$uf.B  
    Connection cn = ds.getConnection(); 0<{/T*AU:  
  多用于jsp中 mquna"}N  
2、执行sql语句 !_<.6ja  
  1)用Statement来执行sql语句 `{I,!to  
  String sql; 3@$h/xMJ  
  Statement sm = cn.createStatement(); l>"gO9j  
  sm.executeQuery(sql); // 执行数据查询语句(select) mL+}Ka  
  sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); Ndi'b_Sh\  
  2)用PreparedStatement来执行sql语句 KtY~Y  
  String sql; =B1t ?( "  
  sql  = "insert into user (id,name) values (?,?)"; h0n0Dc{4  
  PreparedStatement ps = cn.prepareStatement(sql); b7v] g]*  
  ps.setInt(1,xxx); wd*T"V3  
  ps.setString(2,xxx); F-k1yZ?^  
  ... MS^,h>KI  
  ResultSet rs = ps.executeQuery(); // 查询 u!g=>zEu  
  int c = ps.executeUpdate(); // 更新 /(n)I  
  UE7 P =B  
3、处理执行结果 D]y6*Ha  
  查询语句,返回记录集ResultSet } 3:TPW5S  
  更新语句,返回数字,表示该更新影响的记录数 psRm*,*O  
  ResultSet的方法 y5a^xRDw  
  1、next(),将游标往后移动一行,如果成功返回true;否则返回false A#1aO  
  2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 f]T1:N*t  
   g/+M&k$  
4、释放连接 $$ _ uQf  
  cn.close(); hl}#bZ8]  
  一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection KtEM H  
)2YU|  
可滚动、更新的记录集 \Qk:\aLR  
1、创建可滚动、更新的Statement y(.WK8  
  Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); B>X+eK  
  该Statement取得的ResultSet就是可滚动的 1sc #!^Oo  
2、创建PreparedStatement时指定参数 mm#U a/~1u  
  PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); &%u,b~cL?  
  ResultSet.absolute(9000);  g/z9bOgIX  
批量更新 8f^URN<x  
1、Statement C==tJog[  
  Statement sm = cn.createStatement(); yF0,}  
  sm.addBatch(sql1); Z+t?ah00  
  sm.addBatch(sql2); m)_1->K  
  ... /UyW&]nK  
  sm.executeBatch() w0/W=!_  
  一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 58e{WC  
2、PreparedStatement Zy*}C,Z  
  PreparedStatement ps = cn.preparedStatement(sql); f+xGf6V  
  { e@]cI/j  
  ps.setXXX(1,xxx); oE)c8rE  
  ... ~ezCE4^&  
  ps.addBatch(); -<z'f){gb  
  } fbuop&FN+q  
  ps.executeBatch(); r@%32h  
  一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 :Yz.Bfli  
  NBMY1Xgj  
事务的处理 p6=#LwL'  
1、关闭Connection的自动提交 4vqu(w8 L  
  cn.setAutoCommit(false); R<UjhCvx.  
2、执行一系列sql语句 aE{b65'Dt  
  要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close "6KOql3  
Statement sm ; W]Ph:O ^5c  
sm = cn.createStatement(insert into user...); PY z | d  
sm.executeUpdate(); $Uewv +  
sm.close(); HwST^\Ao  
sm = cn.createStatement("insert into corp...); ;;nmF#  
sm.executeUpdate(); D@ =.4z  
sm.close(); vMRKs#&8  
3、提交 bMSF-lQ  
  cn.commit(); ui 2RTAb  
4、如果发生异常,那么回滚 GMNf#;x  
  cn.rollback();
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

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

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