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

[JAVA]java 数据库基本操作

t_y
级别: 经院硕士
发帖
2080
铜板
4671
人品值
2716
贡献值
3
交易币
0
好评度
2087
信誉值
0
金币
0
所在楼道
java 数据库基本操作 ''YqxJ fb  
1、java数据库操作基本流程 ]o8]b7-  
2、几个常用的重要技巧: kh9'W<tE  
    可滚动、更新的记录集  D3cJIVM  
    批量更新 &EqLF  
    事务处理 ZA+dtEE=f9  
uG^CyM>R`  
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 z3y{0<3  
1、取得数据库连接 (B>/LsTu  
  1)用DriverManager取数据库连接 'g!T${  
  例子 #h?I oB7  
    String className,url,uid,pwd; gYD1A\  
    className = "oracle.jdbc.driver.OracleDriver"; W w,\s5Uw  
    url      = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; }9+;-*m/  
    uid      = "system"; uR ?W|a  
    pwd      = "manager"; N$6e KJ]  
    Class.forName(className); Yy88 5  
    Connection cn = DriverManager.getConnection(url,uid,pwd); Q]YB.n3   
  2)用jndi(java的命名和目录服务)方式 }:m/@LKB  
  例子 IplOXD  
    String jndi = "jdbc/db"; *Jgi=,!m  
    Context ctx = (Context) new InitialContext().lookup("java:comp/env"); 8 MQq3  
    DataSource ds = (DataSource) ctx.lookup(jndi); ^FKiVKI:  
    Connection cn = ds.getConnection(); T9 /;$6s*  
  多用于jsp中 cc|W1,q  
2、执行sql语句 7pm'b,J<  
  1)用Statement来执行sql语句 r }lGcG)  
  String sql; N[p o)}hp  
  Statement sm = cn.createStatement(); ?qNU*d  
  sm.executeQuery(sql); // 执行数据查询语句(select) d.FU) )lmD  
  sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); x="Wqcnj{  
  2)用PreparedStatement来执行sql语句 B+K6(^j,,y  
  String sql; Q,[G?vbj  
  sql  = "insert into user (id,name) values (?,?)"; -B;#pTG  
  PreparedStatement ps = cn.prepareStatement(sql); SLKpl LO  
  ps.setInt(1,xxx); Wd:pqhLh  
  ps.setString(2,xxx); j{%;n40$  
  ... %rylmioW>  
  ResultSet rs = ps.executeQuery(); // 查询 m+0yf(w  
  int c = ps.executeUpdate(); // 更新 dymq Z<  
  .\ ;'>qy  
3、处理执行结果 v>_@D@pr  
  查询语句,返回记录集ResultSet ;=y"Z^  
  更新语句,返回数字,表示该更新影响的记录数 &eHRn_st5b  
  ResultSet的方法 H)Btm  
  1、next(),将游标往后移动一行,如果成功返回true;否则返回false M76p=*  
  2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 5EFt0?G   
  inWLIXC,  
4、释放连接 ,X.[37  
  cn.close(); /K#k_k  
  一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection I8Aq8XBw  
_~z oMdT!  
可滚动、更新的记录集 5dePpFD5  
1、创建可滚动、更新的Statement ~w? 02FU  
  Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); fzIs^(:fl  
  该Statement取得的ResultSet就是可滚动的 ; ~pgF_  
2、创建PreparedStatement时指定参数 r[S(VPo[()  
  PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); J#I RbO)  
  ResultSet.absolute(9000);  +/ZIs|B4,z  
批量更新 M7TLQqaF  
1、Statement 2!{D~Gfl=  
  Statement sm = cn.createStatement(); fB8, )&  
  sm.addBatch(sql1); !;eE7xn&  
  sm.addBatch(sql2); L,}'ST  
  ... g'7E6n"!,  
  sm.executeBatch() Ix-Mp   
  一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 J8 qFdNK  
2、PreparedStatement XwY,xg&o  
  PreparedStatement ps = cn.preparedStatement(sql); N&HI)X2&  
  { >v]^nJl  
  ps.setXXX(1,xxx); iH8we,s'  
  ... N d].(_  
  ps.addBatch(); ubwM*P  
  } ev4[4T-( @  
  ps.executeBatch(); GC')50T J  
  一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 q&25,zWD  
  X' `n>1z  
事务的处理 z`wIb  
1、关闭Connection的自动提交 Zw]"p63eMa  
  cn.setAutoCommit(false); l7|z]v-  
2、执行一系列sql语句 wZ(1\ M(  
  要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close fz(YP=@ZnP  
Statement sm ; XQo\27Fo  
sm = cn.createStatement(insert into user...); BU:;;iV8  
sm.executeUpdate(); C?\(?%B  
sm.close(); \O5L#dc#  
sm = cn.createStatement("insert into corp...); Anz{u$0M[  
sm.executeUpdate(); F7DA~G!  
sm.close(); DpRMXo[  
3、提交 YnEyL2SuU  
  cn.commit(); 'H5 30Y\  
4、如果发生异常,那么回滚 731Lz*IFg  
  cn.rollback();
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

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

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