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

[JAVA]java 数据库基本操作

t_y
级别: 经院硕士
发帖
2080
铜板
4671
人品值
2716
贡献值
3
交易币
0
好评度
2087
信誉值
0
金币
0
所在楼道
java 数据库基本操作 -5A@FGh  
1、java数据库操作基本流程 8oY0?|_Bx  
2、几个常用的重要技巧: tkWWR%c"  
    可滚动、更新的记录集 knypSgk_  
    批量更新 ~s{$&N  
    事务处理 oZ%t!Fl1  
rQK2&37-,@  
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 9Dd/g7  
1、取得数据库连接 }6eWdm!B  
  1)用DriverManager取数据库连接 n$}c+1   
  例子 P/t$xqAL  
    String className,url,uid,pwd; A]B D2   
    className = "oracle.jdbc.driver.OracleDriver"; NF0} eom  
    url      = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; 2P9hx5PiV  
    uid      = "system"; NS=puo  
    pwd      = "manager"; $$ \| 3rj!  
    Class.forName(className); 0;e>kz3o  
    Connection cn = DriverManager.getConnection(url,uid,pwd); xYRL4  
  2)用jndi(java的命名和目录服务)方式 LL-MZ~ZB  
  例子 \J0gzi.  
    String jndi = "jdbc/db"; h vGb9  
    Context ctx = (Context) new InitialContext().lookup("java:comp/env"); g{l;v  
    DataSource ds = (DataSource) ctx.lookup(jndi); x!!: jL'L  
    Connection cn = ds.getConnection(); H5/%"1Q  
  多用于jsp中 O>w $  
2、执行sql语句 2N(c&Dzkh`  
  1)用Statement来执行sql语句 H"I|dK:  
  String sql; u9m"{KnV  
  Statement sm = cn.createStatement(); 9ZG.%+l  
  sm.executeQuery(sql); // 执行数据查询语句(select) xgJ2W_  
  sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); z -(dT  
  2)用PreparedStatement来执行sql语句 blaxUP:  
  String sql; Z/hSH 0(~  
  sql  = "insert into user (id,name) values (?,?)"; fYx$3a.  
  PreparedStatement ps = cn.prepareStatement(sql); m+DkO{8F  
  ps.setInt(1,xxx); WJe  
  ps.setString(2,xxx); vyqlP;K  
  ... ^l_W9s  
  ResultSet rs = ps.executeQuery(); // 查询 BWL~)Hx  
  int c = ps.executeUpdate(); // 更新 qVJV9n  
  IcPIOCmOc  
3、处理执行结果 rtf>\j+  
  查询语句,返回记录集ResultSet K*;=^PY  
  更新语句,返回数字,表示该更新影响的记录数 X"8Jk 4y  
  ResultSet的方法 E'Egc4Z2=l  
  1、next(),将游标往后移动一行,如果成功返回true;否则返回false x1+8f2[  
  2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 Fg5c;sls  
  CbS9fc&  
4、释放连接 |,t#Au}61  
  cn.close(); fVo)# Bj  
  一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection Y.F:1<FAtf  
6P?   
可滚动、更新的记录集 ]t7<$L   
1、创建可滚动、更新的Statement dB_\0?jJ-  
  Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); ]O7I7K  
  该Statement取得的ResultSet就是可滚动的 qN+ngk,:  
2、创建PreparedStatement时指定参数 33[2$FBf  
  PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); wvJm)Mj+  
  ResultSet.absolute(9000);  hV'JTU]H  
批量更新 #12PO q  
1、Statement $+S'Boo   
  Statement sm = cn.createStatement(); l4hC>q$T  
  sm.addBatch(sql1); '!{zO" 1*  
  sm.addBatch(sql2); C#>c(-p>RC  
  ... zWB>;Z}  
  sm.executeBatch() 292e0cE  
  一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有  5ah]E  
2、PreparedStatement FB6`2E%o  
  PreparedStatement ps = cn.preparedStatement(sql); ~+QfP:G  
  { mWUQF"q8  
  ps.setXXX(1,xxx); |CY.Y,  
  ... h3>/..l  
  ps.addBatch(); fX#Em'Ab[  
  } ?8b?{`@V  
  ps.executeBatch(); `dn|n I2  
  一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。  U`IDZ{g  
  GvF~h0wMt  
事务的处理 =<iK3bPkU  
1、关闭Connection的自动提交 ?o),F^ir  
  cn.setAutoCommit(false); 0j7\.aaK  
2、执行一系列sql语句 :s$ rD  
  要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close %@kmuz??  
Statement sm ; V8`t7[r  
sm = cn.createStatement(insert into user...); PRWS[2[yk  
sm.executeUpdate(); 2m[z4V@`  
sm.close(); E]6;nY?  
sm = cn.createStatement("insert into corp...); C:l /%   
sm.executeUpdate(); I r<5%  
sm.close(); e6QUe.S  
3、提交 b)3dZ*cOJ  
  cn.commit(); <k6Zx-6X<  
4、如果发生异常,那么回滚 `kVy1WiY  
  cn.rollback();
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

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

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