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

[JAVA]java 数据库基本操作

t_y
级别: 经院硕士
发帖
2080
铜板
4671
人品值
2716
贡献值
3
交易币
0
好评度
2087
信誉值
0
金币
0
所在楼道
java 数据库基本操作 R#Hz%/:|A  
1、java数据库操作基本流程 @RFJe$%  
2、几个常用的重要技巧: 5{O9<~,  
    可滚动、更新的记录集 &L4>w.b"N  
    批量更新 >'2=3L^Q  
    事务处理 @rt}z+JF  
8VR! Y0`e  
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 \:`-"Ou(*  
1、取得数据库连接 )SsO,E+t=U  
  1)用DriverManager取数据库连接 e[*%tx H  
  例子 A!fRpN  
    String className,url,uid,pwd; )b;}]C  
    className = "oracle.jdbc.driver.OracleDriver"; C&-]RffA  
    url      = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; nj5Hls  
    uid      = "system"; 1n )&%r  
    pwd      = "manager"; LCkaSv/[RB  
    Class.forName(className); N2e]S8-  
    Connection cn = DriverManager.getConnection(url,uid,pwd); fW8whN  
  2)用jndi(java的命名和目录服务)方式 `Uy'YfYF  
  例子 N"&qy3F  
    String jndi = "jdbc/db"; +U*:WKdI?  
    Context ctx = (Context) new InitialContext().lookup("java:comp/env"); \K(QE ~y'W  
    DataSource ds = (DataSource) ctx.lookup(jndi); }@Ou]o  
    Connection cn = ds.getConnection(); HC/?o0  
  多用于jsp中 #JW~&;  
2、执行sql语句 2&d|L|->  
  1)用Statement来执行sql语句 YKG}4{T  
  String sql; +n&9ZC H  
  Statement sm = cn.createStatement(); 6T ,'Oz  
  sm.executeQuery(sql); // 执行数据查询语句(select) E.+BqWZ!  
  sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); Tl`HFZQ1  
  2)用PreparedStatement来执行sql语句 0rj50$~$]  
  String sql; RqRyZ*n  
  sql  = "insert into user (id,name) values (?,?)"; e{7"7wn=  
  PreparedStatement ps = cn.prepareStatement(sql); muKCCWy#  
  ps.setInt(1,xxx); B{\qYL/~  
  ps.setString(2,xxx); /E<:=DD<  
  ... `CF.-Vl3J#  
  ResultSet rs = ps.executeQuery(); // 查询 1]]#HTwX  
  int c = ps.executeUpdate(); // 更新 $V2.@ X  
  rX@?~(^ML  
3、处理执行结果 P* .0kR1n  
  查询语句,返回记录集ResultSet {;E]#=|  
  更新语句,返回数字,表示该更新影响的记录数 LGPPyK Nx  
  ResultSet的方法 ]Wdnr1d~8  
  1、next(),将游标往后移动一行,如果成功返回true;否则返回false |tqYRWn0  
  2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 ]aTF0 R  
  4+'d">+|  
4、释放连接 tB==v{t  
  cn.close(); wTkcR^  
  一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection ,%EGM+  
vfPIC!  
可滚动、更新的记录集 ]iE) 8X  
1、创建可滚动、更新的Statement ~5sH`w~vQ  
  Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); 3KN>t)A#  
  该Statement取得的ResultSet就是可滚动的 DZ5QC aA  
2、创建PreparedStatement时指定参数 5;_&C=[  
  PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); gO,2:,  
  ResultSet.absolute(9000);  lz88//@gZ  
批量更新 * J|]E(  
1、Statement Ab/KVB  
  Statement sm = cn.createStatement(); bo04y)Iz  
  sm.addBatch(sql1); )9'Zb`n  
  sm.addBatch(sql2); do&0m[x%  
  ... c3q @]|aI  
  sm.executeBatch() UcxMA%Pw7$  
  一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 v!77dj 6I  
2、PreparedStatement nHTb~t5Ke  
  PreparedStatement ps = cn.preparedStatement(sql); Mv#\+|p 1x  
  { yi@mf$A|  
  ps.setXXX(1,xxx); IBSoAL  
  ... Zq\Vq:MX  
  ps.addBatch(); S1D;Xv@  
  } 'ghwc:Og|%  
  ps.executeBatch(); o]O  
  一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 X Cf!xIv  
  4oywP^I  
事务的处理 -VPda @@w  
1、关闭Connection的自动提交 vQhi2J'  
  cn.setAutoCommit(false); ^dCSk==  
2、执行一系列sql语句 ;/|3U7{c  
  要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close cu#s}* Ip  
Statement sm ; > J>|+W  
sm = cn.createStatement(insert into user...); Aa`'g0wmc  
sm.executeUpdate(); XX|wle1Kg  
sm.close(); tj;<EaM  
sm = cn.createStatement("insert into corp...); y&{ Z"+B5  
sm.executeUpdate(); 9d1 G u"  
sm.close(); n9N '}z  
3、提交 QB|D_?]  
  cn.commit(); h(Ccm44  
4、如果发生异常,那么回滚 [$P.ek<  
  cn.rollback();
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

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

您目前还是游客,请 登录注册
如果您在写长篇帖子又不马上发表,建议存为草稿
认证码:
验证问题:
3+5=?,请输入中文答案:八 正确答案:八