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

[JAVA]java 数据库基本操作

t_y
级别: 经院硕士
发帖
2080
铜板
4671
人品值
2716
贡献值
3
交易币
0
好评度
2087
信誉值
0
金币
0
所在楼道
java 数据库基本操作 VL%. maj  
1、java数据库操作基本流程 fWHvVyQ.  
2、几个常用的重要技巧: pcMzLMG<  
    可滚动、更新的记录集 NcA `E_3  
    批量更新 2z>-H595az  
    事务处理 ;"dX]":  
zlMh^+rMX  
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 rPH7 ]]  
1、取得数据库连接 i>M%)HN  
  1)用DriverManager取数据库连接 aZ@pfWwa:  
  例子 0E.N3iU  
    String className,url,uid,pwd; H cmW  
    className = "oracle.jdbc.driver.OracleDriver"; 1>(EvY}Y\  
    url      = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; :7e*- '  
    uid      = "system"; gt{kjrTv&  
    pwd      = "manager"; _CD~5EA:  
    Class.forName(className); 5lsslE+:J  
    Connection cn = DriverManager.getConnection(url,uid,pwd);  ETZf  
  2)用jndi(java的命名和目录服务)方式 7F<{ Qn  
  例子 [@@{z9c  
    String jndi = "jdbc/db"; U4XW Kwq  
    Context ctx = (Context) new InitialContext().lookup("java:comp/env"); EP:`l  
    DataSource ds = (DataSource) ctx.lookup(jndi); ^h?fr`  
    Connection cn = ds.getConnection(); @O"7@%nu  
  多用于jsp中 zgD?e?yPO  
2、执行sql语句 Q68~D.V%r  
  1)用Statement来执行sql语句 ZRMim6a4X  
  String sql; vQrxx  
  Statement sm = cn.createStatement(); FJ_JaIby  
  sm.executeQuery(sql); // 执行数据查询语句(select) B=A!hXNa  
  sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); St5;X&Q  
  2)用PreparedStatement来执行sql语句 wFMH\a  
  String sql; ERPg TZT  
  sql  = "insert into user (id,name) values (?,?)"; #]h X ."b2  
  PreparedStatement ps = cn.prepareStatement(sql); F ~A $7  
  ps.setInt(1,xxx); Jg#0g eU  
  ps.setString(2,xxx); i(~DhXz*T  
  ... BTAbDyH5  
  ResultSet rs = ps.executeQuery(); // 查询 h)Y] L#R  
  int c = ps.executeUpdate(); // 更新 ~  QRjl  
  t/|0"\ p  
3、处理执行结果 gIo\^ktW  
  查询语句,返回记录集ResultSet aM5]cc%  
  更新语句,返回数字,表示该更新影响的记录数 WI\a  
  ResultSet的方法 @$ 7 GrT  
  1、next(),将游标往后移动一行,如果成功返回true;否则返回false @=kg K[t 9  
  2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 `v -[&  
  ~'M<S=W  
4、释放连接 21TR_0g&<  
  cn.close(); 8AR8u!;8  
  一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection 4t*%(  
gC}}8( k  
可滚动、更新的记录集 eT b!xb  
1、创建可滚动、更新的Statement ]>M\|,wh  
  Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); E &9<JS  
  该Statement取得的ResultSet就是可滚动的 nDn J}`k  
2、创建PreparedStatement时指定参数 WK|5:V8E  
  PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); .\_):j*  
  ResultSet.absolute(9000);  IiE6i43  
批量更新 XFWpHe_ L  
1、Statement $;5Q mKQ'  
  Statement sm = cn.createStatement(); tW/k  
  sm.addBatch(sql1); |r~u7U\  
  sm.addBatch(sql2); V$ZclV2:Ih  
  ... N.*)-O  
  sm.executeBatch() >XtfT'  
  一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 5 `1  
2、PreparedStatement gnJ8tuS  
  PreparedStatement ps = cn.preparedStatement(sql); a0NiVF-m%  
  { jG>W+lq  
  ps.setXXX(1,xxx); 9#9 UzKX#  
  ... @gN"Q\;F  
  ps.addBatch(); 3ijPm<wn  
  } !hVbx#bXl  
  ps.executeBatch(); DS?.'"n[u  
  一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 Pn!~U] A$%  
  7y$\|WG?!r  
事务的处理 ,rMDGZm?  
1、关闭Connection的自动提交 2E }vuw=c  
  cn.setAutoCommit(false); *2 Pr1U  
2、执行一系列sql语句 3sr_V~cZ9  
  要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close ||hQ*X<m>  
Statement sm ; JQ?`l)4  
sm = cn.createStatement(insert into user...); WEwa<%Ss  
sm.executeUpdate(); _(-jk4 L  
sm.close(); <WP@q&^k\  
sm = cn.createStatement("insert into corp...); 5x+]uABE  
sm.executeUpdate(); #@FA=p[%  
sm.close(); M50I.Rd  
3、提交 ?/YABY}L  
  cn.commit(); %`F;i)Zz  
4、如果发生异常,那么回滚 uZ6krI  
  cn.rollback();
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

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

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