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

[JAVA]java 数据库基本操作

t_y
级别: 经院硕士
发帖
2080
铜板
4671
人品值
2716
贡献值
3
交易币
0
好评度
2087
信誉值
0
金币
0
所在楼道
java 数据库基本操作 (``EBEn  
1、java数据库操作基本流程 h>s|MZQ:*  
2、几个常用的重要技巧: Q i&!Ub]  
    可滚动、更新的记录集 z^tws*u],5  
    批量更新 #g)$m}tv?  
    事务处理 HiTn5XNf  
v=-8} S  
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 |~QHCg<  
1、取得数据库连接 f T7Z6$  
  1)用DriverManager取数据库连接 `R}q&|o7<  
  例子 axf4N@  
    String className,url,uid,pwd; /CpU.^V  
    className = "oracle.jdbc.driver.OracleDriver"; DA>_9o/l  
    url      = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; o6{[7jI  
    uid      = "system"; Mi|PhDXMh  
    pwd      = "manager"; >]6 inS9  
    Class.forName(className); [&IJy  
    Connection cn = DriverManager.getConnection(url,uid,pwd);  bnll-G|  
  2)用jndi(java的命名和目录服务)方式 z|';Y!kQ  
  例子 IU f1N+-z  
    String jndi = "jdbc/db"; <2{CR0]u  
    Context ctx = (Context) new InitialContext().lookup("java:comp/env"); O\=U'6 @  
    DataSource ds = (DataSource) ctx.lookup(jndi); pn},ovR;  
    Connection cn = ds.getConnection(); "O`{QVg:  
  多用于jsp中 /FzO9'kj  
2、执行sql语句 *rs@6BSj  
  1)用Statement来执行sql语句 u9 LP=g  
  String sql; xG802?2i/;  
  Statement sm = cn.createStatement(); {J`]6ba  
  sm.executeQuery(sql); // 执行数据查询语句(select) Y[oNg>Rz  
  sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); {9yv3[f3  
  2)用PreparedStatement来执行sql语句 .}AzkKdd@  
  String sql; Y}G9(Ci&  
  sql  = "insert into user (id,name) values (?,?)"; ]p,sve vo  
  PreparedStatement ps = cn.prepareStatement(sql); 3['aK|qk.  
  ps.setInt(1,xxx); p i ;,?p-  
  ps.setString(2,xxx); L|O'X4"&_  
  ... v]"W.<B,  
  ResultSet rs = ps.executeQuery(); // 查询 Ek0zFnb[Gx  
  int c = ps.executeUpdate(); // 更新 7d44i  
  )qg cz<p?W  
3、处理执行结果 \S]"nHX  
  查询语句,返回记录集ResultSet $:{r#mM  
  更新语句,返回数字,表示该更新影响的记录数 o\n9(ao  
  ResultSet的方法 ;S+UD~i[Bu  
  1、next(),将游标往后移动一行,如果成功返回true;否则返回false HnDz4eD  
  2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 i_ha^mq3  
  p};B*[ki  
4、释放连接 [| \Z"   
  cn.close(); PS" ,  
  一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection 7~gIOu  
&rdz({  
可滚动、更新的记录集 v[3QI7E3  
1、创建可滚动、更新的Statement 1qEpQ.:](  
  Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); MfX1&/Z+  
  该Statement取得的ResultSet就是可滚动的 H9@24NFb  
2、创建PreparedStatement时指定参数 C'6 yt  
  PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); X(sN+7DOV  
  ResultSet.absolute(9000);  ?`m#Y&Oi  
批量更新 PP2>v|  
1、Statement l%$~X0%DM  
  Statement sm = cn.createStatement(); xq U@87[_  
  sm.addBatch(sql1); A Th<=1  
  sm.addBatch(sql2); z.NJu q  
  ... D)XV{Wit  
  sm.executeBatch()  73:y&U  
  一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 NU>'$s  
2、PreparedStatement )<fa1Gz#^  
  PreparedStatement ps = cn.preparedStatement(sql); (qf%,F,_L  
  { |.OXe!uU41  
  ps.setXXX(1,xxx); v)^8e0vx  
  ... -i,=sZXB  
  ps.addBatch(); Dy_ayxm  
  } 0QWc1L  
  ps.executeBatch(); ~1_v;LhH5+  
  一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 q%G"P*g$(  
  t`b!3U>I  
事务的处理 ?3f-" K_r  
1、关闭Connection的自动提交 L7\ rx w  
  cn.setAutoCommit(false); XXx]~m  
2、执行一系列sql语句 fyRSg B00$  
  要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close Yy,i,c`r  
Statement sm ; b7thu5  
sm = cn.createStatement(insert into user...); |OgtAI9  
sm.executeUpdate(); >I9w|z FA  
sm.close(); *,hg+?lZ  
sm = cn.createStatement("insert into corp...); `R9}.?7  
sm.executeUpdate(); scXY~l]I*  
sm.close(); TSgfIE|  
3、提交 5:oteNc3  
  cn.commit(); +,"O#`sy<  
4、如果发生异常,那么回滚 #@ quuiYq  
  cn.rollback();
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

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

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