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

[JAVA]java 数据库基本操作

t_y
级别: 经院硕士
发帖
2080
铜板
4671
人品值
2716
贡献值
3
交易币
0
好评度
2087
信誉值
0
金币
0
所在楼道
java 数据库基本操作 y 5=J6a2.  
1、java数据库操作基本流程 O" T1=4  
2、几个常用的重要技巧: :Z&ipd!yY  
    可滚动、更新的记录集 }De)_E\~  
    批量更新 x %$Z/  
    事务处理 +K+ == mO&  
B{zIW'Ld  
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 G-rN?R.  
1、取得数据库连接 )m6=_q5@o  
  1)用DriverManager取数据库连接 GZO,]%z  
  例子  f0:)  
    String className,url,uid,pwd; ZtIK"o-|!  
    className = "oracle.jdbc.driver.OracleDriver"; L@v0C)  
    url      = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; {x-g?HB  
    uid      = "system"; j^LnHVHk1  
    pwd      = "manager"; {qj>  
    Class.forName(className); n NAJ8z}Nt  
    Connection cn = DriverManager.getConnection(url,uid,pwd); .p0;y3so4  
  2)用jndi(java的命名和目录服务)方式 Ws(BouJ  
  例子 iPE-j#|  
    String jndi = "jdbc/db"; 0k3^+#J  
    Context ctx = (Context) new InitialContext().lookup("java:comp/env"); +y-:(aP  
    DataSource ds = (DataSource) ctx.lookup(jndi); :<nL9y jt  
    Connection cn = ds.getConnection(); :@Q_oyWE8  
  多用于jsp中 d[ {=/~0  
2、执行sql语句 xXLKL6F(\  
  1)用Statement来执行sql语句 $BNn1C8[  
  String sql; bZa?h.IF  
  Statement sm = cn.createStatement(); ]jM D'vg^b  
  sm.executeQuery(sql); // 执行数据查询语句(select) KxiZx I  
  sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); M"~B_t,Nw  
  2)用PreparedStatement来执行sql语句 &0Nd9%>  
  String sql; /@on=~  
  sql  = "insert into user (id,name) values (?,?)"; >R.~'A/$F  
  PreparedStatement ps = cn.prepareStatement(sql); ;/ p)vR  
  ps.setInt(1,xxx); {%~Sbcq4F  
  ps.setString(2,xxx); bp5hS/A^1w  
  ... mA{gj[@:x  
  ResultSet rs = ps.executeQuery(); // 查询 .H9!UQ&It  
  int c = ps.executeUpdate(); // 更新 y5l4H8{h}  
  %f?#) 01>  
3、处理执行结果 <f:b%Pm 7  
  查询语句,返回记录集ResultSet AvH/Q_-b  
  更新语句,返回数字,表示该更新影响的记录数 ZP?](RV>xg  
  ResultSet的方法 ][TS|\\  
  1、next(),将游标往后移动一行,如果成功返回true;否则返回false {>5c,L$  
  2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 KA.@q AEB  
  y*_g1q$  
4、释放连接 X~W5Z(w(O  
  cn.close(); 6I 2`m(5  
  一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection k%uRG_  
#bf^Pq'8  
可滚动、更新的记录集 =(v/pLLK?  
1、创建可滚动、更新的Statement -Xx,"[sN\w  
  Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); o'R_kadN[T  
  该Statement取得的ResultSet就是可滚动的 K@ W~  
2、创建PreparedStatement时指定参数 IgSe%B  
  PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); I7]45pF  
  ResultSet.absolute(9000);  mVk:[ }l6  
批量更新 JCE364$$"  
1、Statement ,{YC|uB  
  Statement sm = cn.createStatement(); P`RM"'Om  
  sm.addBatch(sql1); GAPZt4Z2  
  sm.addBatch(sql2); mo <g'|0  
  ... 7!Fu.Ps >  
  sm.executeBatch() R-Uj\M>  
  一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 v]vrD2L  
2、PreparedStatement .\< \J|3  
  PreparedStatement ps = cn.preparedStatement(sql); `/Z8mFs Y  
  { {T.$xiR  
  ps.setXXX(1,xxx); A:k`Ykr[  
  ...  #]n[  
  ps.addBatch(); TS@EE&Wq  
  } NcqE)"yObo  
  ps.executeBatch();  vUJb-  
  一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 {:fyz#>>^  
  -cJ(iz9!  
事务的处理 iSHNt0Nl  
1、关闭Connection的自动提交 2{ }5WH  
  cn.setAutoCommit(false); :Im_=S[0  
2、执行一系列sql语句 c1b@3  
  要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close IzkZ^;(N  
Statement sm ; )WuuU [(  
sm = cn.createStatement(insert into user...); )]rGGNF*  
sm.executeUpdate(); R%}OZJ_  
sm.close(); Jd/ 5Kx  
sm = cn.createStatement("insert into corp...); MI<hShc\  
sm.executeUpdate(); {hVSVx8ZL  
sm.close(); <9B43  
3、提交 Vs m06Rj{  
  cn.commit(); bm(0raugs  
4、如果发生异常,那么回滚 @$Z5A g!  
  cn.rollback();
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

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

您目前还是游客,请 登录注册
欢迎提供真实交流,考虑发帖者的感受
认证码:
验证问题:
3+5=?,请输入中文答案:八 正确答案:八