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

[JAVA]java 数据库基本操作

t_y
级别: 经院硕士
发帖
2080
铜板
4671
人品值
2716
贡献值
3
交易币
0
好评度
2087
信誉值
0
金币
0
所在楼道
java 数据库基本操作 hqY9\,.C  
1、java数据库操作基本流程 m!:7ur:Y  
2、几个常用的重要技巧: _rqOzE)  
    可滚动、更新的记录集 >M^ 1m(  
    批量更新 0 n,5"B  
    事务处理 k[ Iwxl;/  
m=S[Y^tR  
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 `R ^g[0 w'  
1、取得数据库连接 >{4pEy  
  1)用DriverManager取数据库连接 88U4I  
  例子 v-) eT  
    String className,url,uid,pwd; rA9x T`  
    className = "oracle.jdbc.driver.OracleDriver"; BQB O]<99  
    url      = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; }FMl4 _}u  
    uid      = "system"; (`18W1f5W  
    pwd      = "manager"; WytCc>oL  
    Class.forName(className); ooIMN =  
    Connection cn = DriverManager.getConnection(url,uid,pwd); Z=!*7@QY  
  2)用jndi(java的命名和目录服务)方式 `z)!!y  
  例子 ojVpw4y.  
    String jndi = "jdbc/db"; [`fq4Ky  
    Context ctx = (Context) new InitialContext().lookup("java:comp/env"); nHKEtKDd  
    DataSource ds = (DataSource) ctx.lookup(jndi); 0 $e;#}  
    Connection cn = ds.getConnection(); ^^?DYC   
  多用于jsp中 Mn~A;=%qF  
2、执行sql语句 pLzsL>6h  
  1)用Statement来执行sql语句 vo`wYJ3W  
  String sql; <\^X,,WtO  
  Statement sm = cn.createStatement(); .3|9 ~]  
  sm.executeQuery(sql); // 执行数据查询语句(select) hCT%1R}rKr  
  sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); qW7"qw=   
  2)用PreparedStatement来执行sql语句 ITc/aX  
  String sql; &OhKx  
  sql  = "insert into user (id,name) values (?,?)"; `6mHt6"h  
  PreparedStatement ps = cn.prepareStatement(sql); sjTsaM;<  
  ps.setInt(1,xxx); i8B%|[ nm  
  ps.setString(2,xxx); DJQ]NY|  
  ... DhZtiqL#_  
  ResultSet rs = ps.executeQuery(); // 查询 0!vC0T[  
  int c = ps.executeUpdate(); // 更新 qfSoF|  
  eN> (IW  
3、处理执行结果 w ^<Y5K  
  查询语句,返回记录集ResultSet Km <Wh=  
  更新语句,返回数字,表示该更新影响的记录数 M@'V4oUz  
  ResultSet的方法 }=;>T)QmMO  
  1、next(),将游标往后移动一行,如果成功返回true;否则返回false <Z m ,q}  
  2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 [V)sCAW  
  (FjgnsW  
4、释放连接 =(n'#mV  
  cn.close(); btOTDqG`a  
  一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection )b%c]!  
uPF yRWK  
可滚动、更新的记录集 Tc88U8Gc  
1、创建可滚动、更新的Statement HJJ ^pk&  
  Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); Q?a"uei[  
  该Statement取得的ResultSet就是可滚动的 y{<#pS.  
2、创建PreparedStatement时指定参数 {-Y_8@&  
  PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); 9>i6oF]Oq  
  ResultSet.absolute(9000);  bf74 "  
批量更新 /M3D[aR<d  
1、Statement Q"Ec7C5eM  
  Statement sm = cn.createStatement(); GcU/   
  sm.addBatch(sql1); !%u#J:z2  
  sm.addBatch(sql2); N6J$z\ P  
  ... MtYP3:  
  sm.executeBatch() ]~qN<x  
  一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 +uLo~GdbE  
2、PreparedStatement y:A0!75  
  PreparedStatement ps = cn.preparedStatement(sql); 13QCM0#  
  { aydal 9M  
  ps.setXXX(1,xxx); |?| u-y  
  ... Z>,X$ Y6<  
  ps.addBatch(); b;t]k9:"L  
  } W vJ?e  
  ps.executeBatch(); T8441qo{>  
  一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 ,&9|Ac?$  
  e,BJD>N ?  
事务的处理 |RmBa'.)z  
1、关闭Connection的自动提交 -bE|FFU  
  cn.setAutoCommit(false); BO_^3Me*  
2、执行一系列sql语句 /<C=9?Ok  
  要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close 9~_6mR<  
Statement sm ; c ~ SI"  
sm = cn.createStatement(insert into user...); 7jPmI  
sm.executeUpdate(); %Xl@o  
sm.close(); AM[:Og S  
sm = cn.createStatement("insert into corp...); p c],H  
sm.executeUpdate(); pI`Ke"  
sm.close(); *G^]j )/  
3、提交 K+\hv~+@  
  cn.commit(); w&{J9'~  
4、如果发生异常,那么回滚 W@tLT[}CG  
  cn.rollback();
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

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

您目前还是游客,请 登录注册
批量上传需要先选择文件,再选择上传
认证码:
验证问题:
3+5=?,请输入中文答案:八 正确答案:八