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

[JAVA]java 数据库基本操作

t_y
级别: 经院硕士
发帖
2080
铜板
4671
人品值
2716
贡献值
3
交易币
0
好评度
2087
信誉值
0
金币
0
所在楼道
java 数据库基本操作 x:0nK,  
1、java数据库操作基本流程 8;q2W F{AX  
2、几个常用的重要技巧: C9Xj)5k@R  
    可滚动、更新的记录集 6 66f;h  
    批量更新 +hL%8CVU M  
    事务处理 =*'K'e>P3  
YCI- p p  
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 Pgo^$xn'6  
1、取得数据库连接 V 3yt{3Or  
  1)用DriverManager取数据库连接 qP4vH]  
  例子 ? f>pKe  
    String className,url,uid,pwd; 2J1YrHj3  
    className = "oracle.jdbc.driver.OracleDriver"; G5hh$Nmpi  
    url      = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; eW/sP Q-  
    uid      = "system"; 1@6FV x  
    pwd      = "manager"; FJH'!P\  
    Class.forName(className); !W48sZr1&  
    Connection cn = DriverManager.getConnection(url,uid,pwd); F\BD7W  
  2)用jndi(java的命名和目录服务)方式 p`mNy o'  
  例子 TChKm- x  
    String jndi = "jdbc/db"; tO8<N'TD  
    Context ctx = (Context) new InitialContext().lookup("java:comp/env"); /5&' U!:+  
    DataSource ds = (DataSource) ctx.lookup(jndi); SMIr@*R  
    Connection cn = ds.getConnection(); *)82iD  
  多用于jsp中 1 2y+g5b  
2、执行sql语句 <xO" E%t  
  1)用Statement来执行sql语句 wu`P=-  
  String sql; D\9-MXc1  
  Statement sm = cn.createStatement(); a%NSL6  
  sm.executeQuery(sql); // 执行数据查询语句(select) pe@j`Sm:Ej  
  sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); 9LK<u$C  
  2)用PreparedStatement来执行sql语句 ["} Yp  
  String sql; k]] e8>  
  sql  = "insert into user (id,name) values (?,?)"; "+k^8ki  
  PreparedStatement ps = cn.prepareStatement(sql); w^N3Ma  
  ps.setInt(1,xxx); kY.3x# w  
  ps.setString(2,xxx); *c{X\!YBh  
  ... (I0QwB  
  ResultSet rs = ps.executeQuery(); // 查询 am(jmf::  
  int c = ps.executeUpdate(); // 更新 ]<g`rR7}  
  t/Y)%N  
3、处理执行结果 }35HKgqX  
  查询语句,返回记录集ResultSet s:f%=4-7  
  更新语句,返回数字,表示该更新影响的记录数 si,W.9rU  
  ResultSet的方法 SO8b~N  
  1、next(),将游标往后移动一行,如果成功返回true;否则返回false %5rC`9^  
  2、getInt("id")或getSting("name"),返回当前游标下某个字段的值  bMDj+i  
  rFl6xM;F  
4、释放连接 n[tES6u  
  cn.close(); H;k-@J  
  一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection 9S! 2r  
5 4vDP9  
可滚动、更新的记录集 '~;vp  
1、创建可滚动、更新的Statement S :%SarhBD  
  Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); *fg|HH+i  
  该Statement取得的ResultSet就是可滚动的 BE LxaV,  
2、创建PreparedStatement时指定参数 SM1[)jZ-  
  PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); r]lPXj(`  
  ResultSet.absolute(9000);  4!)=!sL ;  
批量更新 |a{~Imz{  
1、Statement gkRbb   
  Statement sm = cn.createStatement(); J%SuiT$L&Y  
  sm.addBatch(sql1); qEy]Rc%  
  sm.addBatch(sql2); ;rjd?r  
  ... ]^c]*O[8  
  sm.executeBatch() ,d~6LXr<fM  
  一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 B kh1VAT  
2、PreparedStatement Yfjp:hg/!  
  PreparedStatement ps = cn.preparedStatement(sql); {- Y.C*E  
  { y>jP]LR4  
  ps.setXXX(1,xxx); b 9cY  
  ... 9}*<8%PSt,  
  ps.addBatch(); ie9,ye"  
  } *C"-$WU3o  
  ps.executeBatch(); D5gDVulsh  
  一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 +x_9IvaW&?  
  29~Bu5  
事务的处理 .^aqzA=]  
1、关闭Connection的自动提交 u{d\3-]/  
  cn.setAutoCommit(false); W&HF*Aw  
2、执行一系列sql语句 jGaI6G'N  
  要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close lk`,s  
Statement sm ; ),;O3:n  
sm = cn.createStatement(insert into user...); 8DO3L "  
sm.executeUpdate(); ;[R#:Rk  
sm.close(); [Z$E^QAP  
sm = cn.createStatement("insert into corp...); \\{+t<?J  
sm.executeUpdate(); RZrQ^tI3"  
sm.close(); Y24H` s1u/  
3、提交 OS7^S1r-  
  cn.commit(); dub %fs  
4、如果发生异常,那么回滚 B>Xfs ZS  
  cn.rollback();
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

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

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