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

[JAVA]java 数据库基本操作

t_y
级别: 经院硕士
发帖
2080
铜板
4671
人品值
2716
贡献值
3
交易币
0
好评度
2087
信誉值
0
金币
0
所在楼道
java 数据库基本操作 irZFV  
1、java数据库操作基本流程 " uPy,<l  
2、几个常用的重要技巧: TV}}dw  
    可滚动、更新的记录集 h`}3h< 8  
    批量更新 <_./SC  
    事务处理 9ElCg"  
uGl| pJ\y=  
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 @E53JKYhY  
1、取得数据库连接 Q\3 Z|%  
  1)用DriverManager取数据库连接 1Fi86  
  例子 qJ_1*!!91  
    String className,url,uid,pwd; =)OC|?9 C\  
    className = "oracle.jdbc.driver.OracleDriver"; .6pOvGKb  
    url      = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; =[<m[.)i  
    uid      = "system"; g+C!kaC)  
    pwd      = "manager"; S? 0)1O  
    Class.forName(className); NS,5/t  
    Connection cn = DriverManager.getConnection(url,uid,pwd); Z2bcCIq4  
  2)用jndi(java的命名和目录服务)方式 i$KpDXP\  
  例子 ]fI/(e_U  
    String jndi = "jdbc/db"; T/P7F\R  
    Context ctx = (Context) new InitialContext().lookup("java:comp/env"); d'9:$!oz  
    DataSource ds = (DataSource) ctx.lookup(jndi); S2VVv$r_6  
    Connection cn = ds.getConnection(); xDO7A5  
  多用于jsp中 D["MUB4l  
2、执行sql语句 jRpdft  
  1)用Statement来执行sql语句 VZIR4J[\.  
  String sql; www`=)A;  
  Statement sm = cn.createStatement(); GW2')}g  
  sm.executeQuery(sql); // 执行数据查询语句(select) 1[;@AE2Y  
  sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); mEuHl>  
  2)用PreparedStatement来执行sql语句 s2v(=  
  String sql; yO>V/5`  
  sql  = "insert into user (id,name) values (?,?)"; 2PSTGG8JV  
  PreparedStatement ps = cn.prepareStatement(sql); 7> Pgc  
  ps.setInt(1,xxx); hD<f3_k  
  ps.setString(2,xxx); XL}<1- }  
  ... L6i|:D32p  
  ResultSet rs = ps.executeQuery(); // 查询 )J3kxmlzQ  
  int c = ps.executeUpdate(); // 更新 ".~{:=  
  qsg>5E  
3、处理执行结果 !)Rr] ~  
  查询语句,返回记录集ResultSet NgB 7?]vu  
  更新语句,返回数字,表示该更新影响的记录数 y$tX-9U  
  ResultSet的方法 ;S/7 h6  
  1、next(),将游标往后移动一行,如果成功返回true;否则返回false BvSIM%>h  
  2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 i`O rMzL  
  1{2eY%+C  
4、释放连接 !|m9|  
  cn.close(); P l{QOR  
  一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection 9''p[V.3  
IdM*5Y>f  
可滚动、更新的记录集 YJ2ro-X  
1、创建可滚动、更新的Statement 5QWNZJ&}d  
  Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); ,dd WBwMK  
  该Statement取得的ResultSet就是可滚动的 aN^IP  
2、创建PreparedStatement时指定参数 lz~J"$b  
  PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); s([Wn)I  
  ResultSet.absolute(9000);  )8{6+{5lu  
批量更新 %>XN%t'6aT  
1、Statement xNN@1P[*  
  Statement sm = cn.createStatement(); hWcTI{v  
  sm.addBatch(sql1); i.rU&yT%  
  sm.addBatch(sql2); 77 :'I  
  ... wh~s Z  
  sm.executeBatch() %TK&)Q% h5  
  一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 O=jN&<rb  
2、PreparedStatement DPJh5d  
  PreparedStatement ps = cn.preparedStatement(sql); MPRO !45Z  
  { f(u&XuZ  
  ps.setXXX(1,xxx); ]RFdLV?  
  ... BEw{X|7  
  ps.addBatch(); 5z]\$=TE  
  } }BN\/;<A  
  ps.executeBatch(); F$hZRZ  
  一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 Ud3""C5B  
  GH3#E*t+[  
事务的处理 cINHH !v  
1、关闭Connection的自动提交 _JOP[KHb  
  cn.setAutoCommit(false); TV{)n'aA  
2、执行一系列sql语句 Z%v6xP.  
  要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close jFj~]]j  
Statement sm ; D&[Z;,CHMA  
sm = cn.createStatement(insert into user...); B2hfD-h,>  
sm.executeUpdate(); E5B8 Z?$a  
sm.close(); H(\V+@~>AD  
sm = cn.createStatement("insert into corp...); }#b %"I0  
sm.executeUpdate(); b4~H3|  
sm.close(); If}lJ6jZ  
3、提交 ;1LG&h,K  
  cn.commit(); U4wpjHg  
4、如果发生异常,那么回滚 i;lE5  
  cn.rollback();
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

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

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