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

[JAVA]java 数据库基本操作

t_y
级别: 经院硕士
发帖
2080
铜板
4671
人品值
2716
贡献值
3
交易币
0
好评度
2087
信誉值
0
金币
0
所在楼道
java 数据库基本操作 d@b2XCh<K  
1、java数据库操作基本流程 VpY,@qh  
2、几个常用的重要技巧: B T {cTj0W  
    可滚动、更新的记录集 xbHI 4A"Z  
    批量更新 X%B$*y5  
    事务处理 Imclz4'8  
&h7 n>q  
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 ];=|))ky"  
1、取得数据库连接 ;WrG\R/|  
  1)用DriverManager取数据库连接 g 4 $  
  例子 >f1fvv6  
    String className,url,uid,pwd; y~M 6  
    className = "oracle.jdbc.driver.OracleDriver"; +Ll29Buyi  
    url      = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; "WbKhE  
    uid      = "system"; 'L{pS-+6  
    pwd      = "manager"; Ri::Ek3qu  
    Class.forName(className); wM-H5\9n  
    Connection cn = DriverManager.getConnection(url,uid,pwd); ?zVE7;r4U  
  2)用jndi(java的命名和目录服务)方式 D)S_ p&  
  例子 ;/IX w>O(/  
    String jndi = "jdbc/db"; _t4(H))]vG  
    Context ctx = (Context) new InitialContext().lookup("java:comp/env"); uI9+@oV  
    DataSource ds = (DataSource) ctx.lookup(jndi); hew"p(`  
    Connection cn = ds.getConnection(); adgd7JjI*  
  多用于jsp中  s%5XBI  
2、执行sql语句 ,u- 9e4  
  1)用Statement来执行sql语句 ]'hel#L;l  
  String sql; mGmZ}H'{  
  Statement sm = cn.createStatement(); "W9z>ezp  
  sm.executeQuery(sql); // 执行数据查询语句(select) ^![7X'!;pt  
  sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); ~~t >;  
  2)用PreparedStatement来执行sql语句 ]xJ. OUJy  
  String sql; /,$V/q+  
  sql  = "insert into user (id,name) values (?,?)"; %*gg6Q  
  PreparedStatement ps = cn.prepareStatement(sql); |'x"+x   
  ps.setInt(1,xxx); muFWFq&yP  
  ps.setString(2,xxx); iHQ$L# 7  
  ... pDhUD}1G  
  ResultSet rs = ps.executeQuery(); // 查询 l!\~T"-7;:  
  int c = ps.executeUpdate(); // 更新 iVmy|ewd  
  ;.R) uCd{=  
3、处理执行结果 Aq>?G+  
  查询语句,返回记录集ResultSet E4_,EeC#  
  更新语句,返回数字,表示该更新影响的记录数 6 lEv<)cC  
  ResultSet的方法 s8' ;4z  
  1、next(),将游标往后移动一行,如果成功返回true;否则返回false :vaVghN\  
  2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 #2Iw%H2q&  
  Bc b '4*:  
4、释放连接 t23W=U  
  cn.close();   
  一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection )N\B C  
dAM]ZR<  
可滚动、更新的记录集 qHd7C3  
1、创建可滚动、更新的Statement zq3f@xOK  
  Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); p&HO~J <w  
  该Statement取得的ResultSet就是可滚动的 :j/sTO=  
2、创建PreparedStatement时指定参数 t"MrrK>T  
  PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); [O]rf+NZ(5  
  ResultSet.absolute(9000);  {*  w _*  
批量更新 lB#7j  
1、Statement ^E+fmY2a  
  Statement sm = cn.createStatement(); O+=}x]q*y  
  sm.addBatch(sql1); S&J5QZjC  
  sm.addBatch(sql2); i]qxF&1  
  ...  ]4K4Nh~  
  sm.executeBatch() VG50n<m9  
  一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 L{&Yh|}  
2、PreparedStatement h$%h w+"4  
  PreparedStatement ps = cn.preparedStatement(sql); d(KK7SQg  
  { KYz@H#M  
  ps.setXXX(1,xxx); G%K&f1q%  
  ... J L1]auO*  
  ps.addBatch(); wk1/&  
  } 0eK>QZ_  
  ps.executeBatch(); la^K|!|  
  一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 z 8#{=e  
  nmyDGuzk  
事务的处理 7m:TY>{  
1、关闭Connection的自动提交 vRDs~'f  
  cn.setAutoCommit(false); J(P'!#z^  
2、执行一系列sql语句 E, oR.B  
  要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close -q&,7'V  
Statement sm ; ;sx4w!Y,  
sm = cn.createStatement(insert into user...); 4Bt)t#0  
sm.executeUpdate(); >q ,Z*s>?  
sm.close(); 3|EAOoWnK  
sm = cn.createStatement("insert into corp...); 4C*0MV  
sm.executeUpdate(); `-?`H>+OG  
sm.close(); '#Do( U'  
3、提交 3bQq Nk  
  cn.commit(); JLg/fB3%  
4、如果发生异常,那么回滚 F4ylD5Y!  
  cn.rollback();
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

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

您目前还是游客,请 登录 或 注册
温馨提示:欢迎交流讨论,请勿纯表情、纯引用!
认证码:
验证问题:
3+5=?,请输入中文答案:八 正确答案:八