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

[JAVA]java 数据库基本操作

t_y
级别: 经院硕士
发帖
2080
铜板
4671
人品值
2716
贡献值
3
交易币
0
好评度
2087
信誉值
0
金币
0
所在楼道
java 数据库基本操作 R~mMGz  
1、java数据库操作基本流程 sNan"  
2、几个常用的重要技巧: T>:g ME  
    可滚动、更新的记录集 tS.b5$Q  
    批量更新 SoON@h/  
    事务处理 V%KW[v<G<  
Vm%ux>}  
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 J hq5G"  
1、取得数据库连接 tFP;CW!E  
  1)用DriverManager取数据库连接 { 'mY>s 7  
  例子 HW%bx"r+4f  
    String className,url,uid,pwd; ^Y*.Ktp,o  
    className = "oracle.jdbc.driver.OracleDriver"; ~}9H<K3V  
    url      = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; 'H-YFB$l  
    uid      = "system"; PI<s5bns {  
    pwd      = "manager"; [Kj#KJxy  
    Class.forName(className); U3iyuE  
    Connection cn = DriverManager.getConnection(url,uid,pwd); ^xu)~:} i  
  2)用jndi(java的命名和目录服务)方式 ~$&r(9P  
  例子 g&(~MD2{  
    String jndi = "jdbc/db"; w+TuS).  
    Context ctx = (Context) new InitialContext().lookup("java:comp/env"); vWfef~}~  
    DataSource ds = (DataSource) ctx.lookup(jndi); RBojT   
    Connection cn = ds.getConnection(); \YF!< 2|[  
  多用于jsp中 x?& xz;  
2、执行sql语句 [tw<TV"\  
  1)用Statement来执行sql语句 ENF@6]  
  String sql; DB= cc  
  Statement sm = cn.createStatement(); uN^qfJ'@ >  
  sm.executeQuery(sql); // 执行数据查询语句(select) o_+Qer=O6  
  sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); >Zp]vK~s  
  2)用PreparedStatement来执行sql语句 |4*2xDcl  
  String sql; -(,6w?  
  sql  = "insert into user (id,name) values (?,?)"; H {Wpf9_ K  
  PreparedStatement ps = cn.prepareStatement(sql); YVV $g-D}  
  ps.setInt(1,xxx); P\4o4MF@K  
  ps.setString(2,xxx); @x>2|`65Y  
  ... AS-t][m#  
  ResultSet rs = ps.executeQuery(); // 查询 T#;*I#A:  
  int c = ps.executeUpdate(); // 更新 ee?M o`  
  *bC^X'  
3、处理执行结果 HbVV]y  
  查询语句,返回记录集ResultSet @Sd:]h:f-  
  更新语句,返回数字,表示该更新影响的记录数 ">^]^wa08  
  ResultSet的方法 D`ge3f8Wi  
  1、next(),将游标往后移动一行,如果成功返回true;否则返回false 9&FV =}MO  
  2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 5} aC'j\  
  M|]1}8d?  
4、释放连接 1:Gd{z  
  cn.close(); 'aWZ#GS*  
  一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection 8WQ%rN={8  
V zx(J)  
可滚动、更新的记录集  b- /x  
1、创建可滚动、更新的Statement 6spk* 8e  
  Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); UR=s{nFd  
  该Statement取得的ResultSet就是可滚动的 Qz$Dv@*y\  
2、创建PreparedStatement时指定参数 wx 'Tv  
  PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); c324@o^V  
  ResultSet.absolute(9000);  2^lT!X@  
批量更新 z=pV{ '  
1、Statement %dR./{txT  
  Statement sm = cn.createStatement(); 1g.9R@Kc$  
  sm.addBatch(sql1); pU'sADC  
  sm.addBatch(sql2); *<j@+Ch  
  ... JNl+UH:.  
  sm.executeBatch() <LZvh8  
  一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 *[YN|  
2、PreparedStatement SX,z J`"  
  PreparedStatement ps = cn.preparedStatement(sql); Kn\(Xd.>  
  { *G=AhH$t  
  ps.setXXX(1,xxx); K0@7/*%  
  ... )5OU!c  
  ps.addBatch(); Z9^$jw]  
  } _Q}z 6+_\  
  ps.executeBatch(); $8}'6,  
  一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 `roSOX1f  
  []Ea0jYu  
事务的处理 T480w6-@  
1、关闭Connection的自动提交 {`zF{AW8q  
  cn.setAutoCommit(false); @>j \~<%  
2、执行一系列sql语句 C^tC} n1D(  
  要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close o$ k$  
Statement sm ; hj1 jY  
sm = cn.createStatement(insert into user...); &Hxr3[+$  
sm.executeUpdate(); 4et#Q  
sm.close(); ^w\uOd`  
sm = cn.createStatement("insert into corp...); Q1[s{,  
sm.executeUpdate(); Q.AM  
sm.close(); #"JU39e  
3、提交 LeCU"~  
  cn.commit(); !Esiq<Yh  
4、如果发生异常,那么回滚 |i8dI)b  
  cn.rollback();
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

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

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