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

[JAVA]java 数据库基本操作

t_y
级别: 经院硕士
发帖
2080
铜板
4671
人品值
2716
贡献值
3
交易币
0
好评度
2087
信誉值
0
金币
0
所在楼道
java 数据库基本操作 0'IV"eH2  
1、java数据库操作基本流程 *t JgQ[  
2、几个常用的重要技巧: 9BJP|L%q  
    可滚动、更新的记录集 PE~umY]  
    批量更新 _qq> 43  
    事务处理 CHeU?NtFps  
0GtL6M@pP  
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 ^}+qd1r  
1、取得数据库连接 iz&$q]P8  
  1)用DriverManager取数据库连接 zF9SZ#{a  
  例子 4' ym vR  
    String className,url,uid,pwd; L"|~,SVF  
    className = "oracle.jdbc.driver.OracleDriver"; L|wD2iw  
    url      = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; -_bnGY%,  
    uid      = "system"; *f[nge&.  
    pwd      = "manager"; )]/gu\90  
    Class.forName(className); kPm{tc  
    Connection cn = DriverManager.getConnection(url,uid,pwd); ETw7/S${  
  2)用jndi(java的命名和目录服务)方式 D`?=]Ysz(  
  例子 J3F-Yl|  
    String jndi = "jdbc/db"; i|]Kw9  
    Context ctx = (Context) new InitialContext().lookup("java:comp/env"); aL9 yNj}2  
    DataSource ds = (DataSource) ctx.lookup(jndi); /A8ua=Kn  
    Connection cn = ds.getConnection(); 7hs1S|  
  多用于jsp中 J|9kWjOf+i  
2、执行sql语句 Uq:WW1=kh  
  1)用Statement来执行sql语句 -bN;nSgb  
  String sql; OT*C7=  
  Statement sm = cn.createStatement(); Z r}5)ZR.  
  sm.executeQuery(sql); // 执行数据查询语句(select) _.9):i2<SF  
  sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); x}Y  
  2)用PreparedStatement来执行sql语句 -VqZw&"  
  String sql; TSGJ2u5ie%  
  sql  = "insert into user (id,name) values (?,?)"; g[Z$\A?ZbZ  
  PreparedStatement ps = cn.prepareStatement(sql); cmLGMlFT  
  ps.setInt(1,xxx); .l| [e  
  ps.setString(2,xxx); 66P'87G  
  ... #y<KO`Es  
  ResultSet rs = ps.executeQuery(); // 查询 iYqZBLf{S  
  int c = ps.executeUpdate(); // 更新  kYls jM  
  0pO{{F  
3、处理执行结果 T<hS  
  查询语句,返回记录集ResultSet 1S&GhJ<wJ  
  更新语句,返回数字,表示该更新影响的记录数 #H'j;=]:  
  ResultSet的方法 _2eRH@T  
  1、next(),将游标往后移动一行,如果成功返回true;否则返回false 6zo'w Wc3  
  2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 *>lh2ssl L  
  P=.yXirm?  
4、释放连接 VH.m H<  
  cn.close(); !Ez5@  
  一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection !e8OC9 _x  
wLF;nzv  
可滚动、更新的记录集 ;_o1{?~  
1、创建可滚动、更新的Statement C 2f=9n/  
  Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); qO;.{f  
  该Statement取得的ResultSet就是可滚动的 +3a} ~pW  
2、创建PreparedStatement时指定参数 BHVC&F*>  
  PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); y&ZyThqg  
  ResultSet.absolute(9000);  |K|[>[?Z/  
批量更新 [y(DtOR  
1、Statement -8HK_eQn  
  Statement sm = cn.createStatement(); Dl a }-A:  
  sm.addBatch(sql1); #\|Ac*>  
  sm.addBatch(sql2); N~""Lc&  
  ... p?uk|C2  
  sm.executeBatch() BBV"nm_(/  
  一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 Ic 5TtN~/>  
2、PreparedStatement |fL|tkGEa  
  PreparedStatement ps = cn.preparedStatement(sql); mH1T|UI  
  { N\,[(LbA&  
  ps.setXXX(1,xxx); }McqoZ%F  
  ... : 3J0Q  
  ps.addBatch(); L701j.7"  
  } ;PS V3Zh  
  ps.executeBatch(); v qt#JdPp9  
  一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 rr@h9bak;g  
  @U8}K#  
事务的处理 I7@|{L1|FB  
1、关闭Connection的自动提交 jR1o<]?  
  cn.setAutoCommit(false); J0ys Z]  
2、执行一系列sql语句 lOp7rW]$  
  要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close Oe)d|6=  
Statement sm ; ~.Wlv;  
sm = cn.createStatement(insert into user...); 8t1XZ  
sm.executeUpdate(); S55h}5Y  
sm.close(); O'm5k l  
sm = cn.createStatement("insert into corp...); &z;bX-"E  
sm.executeUpdate(); TANv)&,|9  
sm.close(); _>8rTk`/h  
3、提交 _#UiY ffa*  
  cn.commit(); 9QQiIi$74U  
4、如果发生异常,那么回滚 L;7u0Yg  
  cn.rollback();
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

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

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