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

[JAVA]java 数据库基本操作

t_y
级别: 经院硕士
发帖
2080
铜板
4671
人品值
2716
贡献值
3
交易币
0
好评度
2087
信誉值
0
金币
0
所在楼道
java 数据库基本操作 v.c.5@%%o  
1、java数据库操作基本流程 y w:=$e5  
2、几个常用的重要技巧: 5>h/LE]"  
    可滚动、更新的记录集 _O&P!hI  
    批量更新 O$X^Ea7~  
    事务处理 ,_ @) IN  
|Rz}bsrZ  
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 #JR$RH  
1、取得数据库连接 7Ac.^rv5  
  1)用DriverManager取数据库连接 /!U(/  
  例子 ps*iE=D  
    String className,url,uid,pwd; 2Hk21y\  
    className = "oracle.jdbc.driver.OracleDriver"; rdH^"(  
    url      = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; N!<X% Ym  
    uid      = "system"; y:k7eE"  
    pwd      = "manager"; .2y @@g  
    Class.forName(className); ? 3oUkGfn  
    Connection cn = DriverManager.getConnection(url,uid,pwd); ;rl61d}NH#  
  2)用jndi(java的命名和目录服务)方式 Nhtc^DX  
  例子 n>,? V3ly  
    String jndi = "jdbc/db"; ? 8)k6:  
    Context ctx = (Context) new InitialContext().lookup("java:comp/env"); F <{k~   
    DataSource ds = (DataSource) ctx.lookup(jndi); SVPksr  
    Connection cn = ds.getConnection(); <3x:nH @  
  多用于jsp中 qR kPl!5  
2、执行sql语句 uCgJ F@  
  1)用Statement来执行sql语句 U-D00l7C  
  String sql;  {IT xHt  
  Statement sm = cn.createStatement(); W+Ou%uv}S  
  sm.executeQuery(sql); // 执行数据查询语句(select) ~|ha9 1  
  sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); u ^M'[<{  
  2)用PreparedStatement来执行sql语句 31N5dIi,  
  String sql; \)W Z D  
  sql  = "insert into user (id,name) values (?,?)"; 'fZ\uMdTx  
  PreparedStatement ps = cn.prepareStatement(sql); Ob]J!.  
  ps.setInt(1,xxx); ycf)*0k  
  ps.setString(2,xxx); [buLo*C4:  
  ... LtV,djk  
  ResultSet rs = ps.executeQuery(); // 查询 ,lVQ-qw5  
  int c = ps.executeUpdate(); // 更新 R`,|08E  
  JD9=gBN\?  
3、处理执行结果 o3:BH@@  
  查询语句,返回记录集ResultSet a'O-0]g,  
  更新语句,返回数字,表示该更新影响的记录数 u1>WG?/`  
  ResultSet的方法 }/ Qj8l.  
  1、next(),将游标往后移动一行,如果成功返回true;否则返回false V;hO1xfR3&  
  2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 o ^ 08<  
  MjK<n[.  
4、释放连接 6NQ`IC  
  cn.close(); 9U3.=J  
  一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection lHE \Z`  
2 ]n4)vv,  
可滚动、更新的记录集 Z:diM$Z?7  
1、创建可滚动、更新的Statement Q x&7Ceu"  
  Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); m%c]+Our`  
  该Statement取得的ResultSet就是可滚动的 iDdR-T|  
2、创建PreparedStatement时指定参数 <v?2p{U%  
  PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); dJ>tM'G  
  ResultSet.absolute(9000);  "BIhd*K[~  
批量更新 40[@d  
1、Statement !vuun |  
  Statement sm = cn.createStatement(); ;@O8y\@  
  sm.addBatch(sql1); "G Jhx/zt  
  sm.addBatch(sql2); ]C{N4Ni^Z  
  ... !E,|EdIr  
  sm.executeBatch() # wyjb:Ql  
  一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 t{`uN  
2、PreparedStatement Vddod  
  PreparedStatement ps = cn.preparedStatement(sql); ]hRs -x  
  { Swgvj(y;!A  
  ps.setXXX(1,xxx); 65tsJ"a<  
  ... #A:^XAU1Z@  
  ps.addBatch(); =6N=5JePB  
  } iz+,,UH  
  ps.executeBatch(); OaY]}4tI$  
  一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 =@nW;PUZ  
  &SPIu,  
事务的处理 M&e=LV  
1、关闭Connection的自动提交 v7v>  
  cn.setAutoCommit(false); 5f75r  
2、执行一系列sql语句 X>Z83qV5d!  
  要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close 2#8PM-3"  
Statement sm ; g@ ]1H41  
sm = cn.createStatement(insert into user...); YB4|J44Y  
sm.executeUpdate(); }:*?w>=  
sm.close(); Ds@K%f(.?w  
sm = cn.createStatement("insert into corp...); ZIc-^&`r=  
sm.executeUpdate(); rMJ4w['J=  
sm.close(); `:2np{  
3、提交 k8cR`5 @PK  
  cn.commit(); (1'sBm7F  
4、如果发生异常,那么回滚 ^5+7D1>W%  
  cn.rollback();
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

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

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