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

[JAVA]java 数据库基本操作

t_y
级别: 经院硕士
发帖
2080
铜板
4671
人品值
2716
贡献值
3
交易币
0
好评度
2087
信誉值
0
金币
0
所在楼道
java 数据库基本操作 af WEt -  
1、java数据库操作基本流程 FeM,$&G:  
2、几个常用的重要技巧: uY5Gn.Y  
    可滚动、更新的记录集 S.kFs{;1x  
    批量更新 d PfD Pb  
    事务处理 _-.~>C  
!1M=9 ~$!  
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 7L=V{,,v  
1、取得数据库连接 e2xqK G  
  1)用DriverManager取数据库连接 bk#t+tuk  
  例子 }hjJt,m  
    String className,url,uid,pwd; :/ yR  
    className = "oracle.jdbc.driver.OracleDriver"; uVBMI.&w  
    url      = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; l8_TeO  
    uid      = "system"; ^"Nsb&  
    pwd      = "manager"; 1q[vNP=g&  
    Class.forName(className); koizk&)  
    Connection cn = DriverManager.getConnection(url,uid,pwd); W%k0_Y/5  
  2)用jndi(java的命名和目录服务)方式 P=jbr"5Q:  
  例子 rLm:qu(F1  
    String jndi = "jdbc/db"; dGb]`*E  
    Context ctx = (Context) new InitialContext().lookup("java:comp/env"); c*"TmDY  
    DataSource ds = (DataSource) ctx.lookup(jndi); ecI[lB  
    Connection cn = ds.getConnection(); E*t0ia8  
  多用于jsp中 &_!g|-  
2、执行sql语句 2\,vq R  
  1)用Statement来执行sql语句 5E#koy7 $s  
  String sql; g}hR q%  
  Statement sm = cn.createStatement(); qt#a_F*rV  
  sm.executeQuery(sql); // 执行数据查询语句(select) Y=6b oT  
  sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); K)`\u7Bu  
  2)用PreparedStatement来执行sql语句 Jc#()4  
  String sql; %Jr6pmc  
  sql  = "insert into user (id,name) values (?,?)"; = +uUWJ&1G  
  PreparedStatement ps = cn.prepareStatement(sql); q;kN+NK64  
  ps.setInt(1,xxx); Wo^r#iRko  
  ps.setString(2,xxx); vG<JOxP  
  ... >iCkvQ  
  ResultSet rs = ps.executeQuery(); // 查询 sO!YM5v8  
  int c = ps.executeUpdate(); // 更新 Bi +a)_K  
  rl,6r u  
3、处理执行结果 uW,L<;HnQ  
  查询语句,返回记录集ResultSet ]o(&J7Z6-  
  更新语句,返回数字,表示该更新影响的记录数 AwKxt'()^  
  ResultSet的方法 t*? CD.S  
  1、next(),将游标往后移动一行,如果成功返回true;否则返回false 62Ab4!  
  2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 gr/o!NC  
  3ppY@_1  
4、释放连接 |x AwiF_  
  cn.close(); wghz[qe  
  一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection 3psCV=/z  
\c! LC4pE  
可滚动、更新的记录集 FH'jP`  
1、创建可滚动、更新的Statement N>fC"  
  Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); Cz\(.MWNZ  
  该Statement取得的ResultSet就是可滚动的 $UZ4,S?V  
2、创建PreparedStatement时指定参数 35;)O -  
  PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); gJVakR&  
  ResultSet.absolute(9000);  T1y,L<7?  
批量更新 J]f\=;z;<a  
1、Statement at/v.U |F  
  Statement sm = cn.createStatement(); C_[V[k0(  
  sm.addBatch(sql1); lxRzyx  
  sm.addBatch(sql2); FRicHs n  
  ... ;n*N9-|.  
  sm.executeBatch() O/IW.t  
  一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 qO<'_7TN[  
2、PreparedStatement xy% lp{  
  PreparedStatement ps = cn.preparedStatement(sql); ua['rOnU  
  { j${:Y$VmE  
  ps.setXXX(1,xxx); -o+_PL $\  
  ... A}#@(ma7  
  ps.addBatch(); bl>MD8bzLE  
  } Qr;es,f  
  ps.executeBatch(); "Yn <]Pa_  
  一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 $ ;/Ny)"  
  &/J[PdSb$  
事务的处理 4 []R?lL  
1、关闭Connection的自动提交 U4_ <  
  cn.setAutoCommit(false); *HmL8c  
2、执行一系列sql语句 C.{*|#&GAt  
  要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close icF -`m  
Statement sm ; _c|>m4+X  
sm = cn.createStatement(insert into user...); *n0k2 p  
sm.executeUpdate(); a$MMp=p  
sm.close(); ] t|KFk!)  
sm = cn.createStatement("insert into corp...); oy'Q#!  
sm.executeUpdate(); $} S5&  
sm.close(); zjh&?G]:G  
3、提交 '[p~| mX  
  cn.commit(); 3MC| O5R4  
4、如果发生异常,那么回滚 lX`)Avqa  
  cn.rollback();
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

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

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