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

[JAVA]java 数据库基本操作

t_y
级别: 经院硕士
发帖
2080
铜板
4671
人品值
2716
贡献值
3
交易币
0
好评度
2087
信誉值
0
金币
0
所在楼道
java 数据库基本操作 ]pP [0 S  
1、java数据库操作基本流程 O<?z\yBtS^  
2、几个常用的重要技巧: L5yv}:.U  
    可滚动、更新的记录集 %t\ ~3pw=  
    批量更新 p/!P kKJ  
    事务处理 )S6"I  
#q%V|Ajq  
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 x4vowF  
1、取得数据库连接 H '(Ky  
  1)用DriverManager取数据库连接 APBe 76'3)  
  例子 )w++cC4/5  
    String className,url,uid,pwd; !q_fcd^c  
    className = "oracle.jdbc.driver.OracleDriver"; CA{(x(W\:  
    url      = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; S 2SJFp  
    uid      = "system"; Td6"o&0A!  
    pwd      = "manager"; h^$ c  
    Class.forName(className); K-b'jP\  
    Connection cn = DriverManager.getConnection(url,uid,pwd); 0*Is#73rjY  
  2)用jndi(java的命名和目录服务)方式 d]6#pSE  
  例子  9> k-";  
    String jndi = "jdbc/db"; MKN],l N  
    Context ctx = (Context) new InitialContext().lookup("java:comp/env"); <ny)yK  
    DataSource ds = (DataSource) ctx.lookup(jndi); Cs ND:m  
    Connection cn = ds.getConnection(); 9c_h+XN?y  
  多用于jsp中 I6E!$ }  
2、执行sql语句 12,,gwh  
  1)用Statement来执行sql语句 #n8jn#  
  String sql; 9(;I+.;8k  
  Statement sm = cn.createStatement(); ~'9>jpnw  
  sm.executeQuery(sql); // 执行数据查询语句(select) b];p/V# <  
  sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); B:Xmc,|,  
  2)用PreparedStatement来执行sql语句 mt(2HBNoz  
  String sql; nwm1YPs%v]  
  sql  = "insert into user (id,name) values (?,?)"; fmhqm"  
  PreparedStatement ps = cn.prepareStatement(sql); Tn7(A^h'  
  ps.setInt(1,xxx); a5AD$bP  
  ps.setString(2,xxx); V=v7<I=]  
  ... _#8OHG.x  
  ResultSet rs = ps.executeQuery(); // 查询 ZOK,P  
  int c = ps.executeUpdate(); // 更新 jw"]U jub  
  \%FEQa0u  
3、处理执行结果 +=/FKzT<  
  查询语句,返回记录集ResultSet hvS4"% \  
  更新语句,返回数字,表示该更新影响的记录数 i;XkH4E:)  
  ResultSet的方法  :nHa-N3  
  1、next(),将游标往后移动一行,如果成功返回true;否则返回false ?{O >&<~  
  2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 D^5bzZk N  
  [*k25N  
4、释放连接 XJ`!d\WL/!  
  cn.close();  H?(I-vO  
  一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection rI E m  
AGe\PCn-  
可滚动、更新的记录集 [;F%6MPK^  
1、创建可滚动、更新的Statement c9eLNVM  
  Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); h8Bs=T  
  该Statement取得的ResultSet就是可滚动的 )lo;y~ o  
2、创建PreparedStatement时指定参数 x]Nk T  
  PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); [JY1|N  
  ResultSet.absolute(9000);  gJ8+HV  
批量更新 d,_Ky#K5b  
1、Statement kyFq  
  Statement sm = cn.createStatement(); J ^J$I!  
  sm.addBatch(sql1); cBO.96ZHE  
  sm.addBatch(sql2); VR@V3 ~  
  ... B3lP#ckh  
  sm.executeBatch() J\BTrN7  
  一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 NRM=0-16u$  
2、PreparedStatement E8Jy!8/X9T  
  PreparedStatement ps = cn.preparedStatement(sql); .<<RI8A  
  { (Mk9##R#  
  ps.setXXX(1,xxx); DRn]>IFU  
  ... J m5).  
  ps.addBatch(); "lFS{7  
  } '9+JaB  
  ps.executeBatch(); INd:_cT4l  
  一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 ]>33sb S6  
  nNCG*Vu  
事务的处理 &.zG?e.  
1、关闭Connection的自动提交 ^Lx(if WJ  
  cn.setAutoCommit(false); ZB)`*z>*  
2、执行一系列sql语句 < ] ~FX 25  
  要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close a,GOS:?O5  
Statement sm ; `Dck$  
sm = cn.createStatement(insert into user...); yBJf'-K  
sm.executeUpdate(); ']N1OVw^vf  
sm.close(); 5 (Lw-_y#  
sm = cn.createStatement("insert into corp...); <}G*/ z?/  
sm.executeUpdate(); oTtJ]`T  
sm.close(); \; 9log<Z  
3、提交 zz)[4G  
  cn.commit(); &%@b;)]J  
4、如果发生异常,那么回滚 _M;n.?H  
  cn.rollback();
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

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

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