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

[JAVA]java 数据库基本操作

t_y
级别: 经院硕士
发帖
2080
铜板
4671
人品值
2716
贡献值
3
交易币
0
好评度
2087
信誉值
0
金币
0
所在楼道
java 数据库基本操作 5eTA]  
1、java数据库操作基本流程 Ub3$`  
2、几个常用的重要技巧: QEJu.o  
    可滚动、更新的记录集 oZ%uq78#[%  
    批量更新 &hWELZe0vv  
    事务处理 b-& rMML  
iE'_x$i  
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 I*-\u  
1、取得数据库连接 8&@=Anc&q  
  1)用DriverManager取数据库连接 m^ xTV-#l@  
  例子 e)e(f"t6Q  
    String className,url,uid,pwd; wC{sP"D  
    className = "oracle.jdbc.driver.OracleDriver"; TZgtu+&  
    url      = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; M1Q&)am  
    uid      = "system"; |P5dv>tb F  
    pwd      = "manager"; 45JL{YRN  
    Class.forName(className); *Dg@fxCQ  
    Connection cn = DriverManager.getConnection(url,uid,pwd); + f6LG 0q  
  2)用jndi(java的命名和目录服务)方式 s-CAo~,  
  例子 0C<\m\|~k  
    String jndi = "jdbc/db"; 85E$m'0O  
    Context ctx = (Context) new InitialContext().lookup("java:comp/env"); 6(E4l5 %  
    DataSource ds = (DataSource) ctx.lookup(jndi); Z 8w\[AF{$  
    Connection cn = ds.getConnection(); K GgtEh|  
  多用于jsp中 n5QO'Jr%[  
2、执行sql语句 Z|qI[uiO  
  1)用Statement来执行sql语句 Vl^x_gs#_]  
  String sql; &;$uU  
  Statement sm = cn.createStatement(); BwHJr(n  
  sm.executeQuery(sql); // 执行数据查询语句(select) .B`$hxl*0c  
  sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); S|=)^$:  
  2)用PreparedStatement来执行sql语句 ]xvA2!) Q  
  String sql; I$"Z\c8;  
  sql  = "insert into user (id,name) values (?,?)"; .F ?ww}2p]  
  PreparedStatement ps = cn.prepareStatement(sql); #eJfwc1JY  
  ps.setInt(1,xxx); ?xaUWD  
  ps.setString(2,xxx); ;2kQ)Bq"  
  ... kQ=bd{a6  
  ResultSet rs = ps.executeQuery(); // 查询 6/;YS[jX  
  int c = ps.executeUpdate(); // 更新 +C`!4v\n  
  oywPPVxj  
3、处理执行结果 v/ry" W  
  查询语句,返回记录集ResultSet ranem0KQ)]  
  更新语句,返回数字,表示该更新影响的记录数 phDIUhL$z  
  ResultSet的方法 1sXCu|\q  
  1、next(),将游标往后移动一行,如果成功返回true;否则返回false "==c  
  2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 "W5MZ  
  |)7K(R)(=  
4、释放连接 `he# !"  
  cn.close(); j}Tv/O,f  
  一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection @* hv|zjs  
XGZZKvp  
可滚动、更新的记录集 Ny"9!3V   
1、创建可滚动、更新的Statement l4RqQ+[KA;  
  Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); ~?NCmU=3  
  该Statement取得的ResultSet就是可滚动的 8ve-g\C8 H  
2、创建PreparedStatement时指定参数 j"jssbu}  
  PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); 0Px Hf*  
  ResultSet.absolute(9000);  JlSqTfA  
批量更新 yD<#Q\,  
1、Statement t3$cX_  
  Statement sm = cn.createStatement(); >.SO2w  
  sm.addBatch(sql1); T]0K4dp+  
  sm.addBatch(sql2); /[6wm1?!  
  ... M.H!dZ  
  sm.executeBatch() S:!5 |o|  
  一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 u/W{JPlL  
2、PreparedStatement R V#w 0 r  
  PreparedStatement ps = cn.preparedStatement(sql); Z*Ffdh>*:&  
  { :+ YHj )mN  
  ps.setXXX(1,xxx); yl>^QMmo  
  ... -, +o*BP  
  ps.addBatch(); ;*5z&1O  
  } Dml?.-Uv<  
  ps.executeBatch(); "pt[Nm76)8  
  一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 pRfKlTU\  
  1<9d[N*  
事务的处理 -F`gRAr-  
1、关闭Connection的自动提交 @IL@|Srs8  
  cn.setAutoCommit(false); ,8*A#cT B  
2、执行一系列sql语句 _U*R_2aV  
  要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close QY+{ OCB  
Statement sm ; N_D=j 6B  
sm = cn.createStatement(insert into user...); 23LG)or.JC  
sm.executeUpdate(); C=c&.-Nb9  
sm.close(); WA}'[h   
sm = cn.createStatement("insert into corp...); a3A-N] ;f  
sm.executeUpdate(); em'3 8L|(  
sm.close(); fe4/[S{a   
3、提交 Il/`#b@h  
  cn.commit(); !o'a]8  
4、如果发生异常,那么回滚 '1!%yKc0  
  cn.rollback();
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

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

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