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

[JAVA]java 数据库基本操作

t_y
级别: 经院硕士
发帖
2080
铜板
4671
人品值
2716
贡献值
3
交易币
0
好评度
2087
信誉值
0
金币
0
所在楼道
java 数据库基本操作 abUvU26t  
1、java数据库操作基本流程 :f?\ mVS+  
2、几个常用的重要技巧: C] qY  
    可滚动、更新的记录集 z _~f/  
    批量更新 &i4*tE3],  
    事务处理 Gvw4ot/  
~mx me6"v  
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 7OG=LF*V-  
1、取得数据库连接 (1pI#H"f9  
  1)用DriverManager取数据库连接 )c|S)iJ7=z  
  例子 k\->uSU9  
    String className,url,uid,pwd; n.9k<  
    className = "oracle.jdbc.driver.OracleDriver"; |^!#x Tj  
    url      = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; W=b<"z]RE  
    uid      = "system"; >d#oJ?goX  
    pwd      = "manager"; ;VM',40  
    Class.forName(className); /8m2oL\<  
    Connection cn = DriverManager.getConnection(url,uid,pwd); oVi_X98R  
  2)用jndi(java的命名和目录服务)方式 ]j.=zQP?'  
  例子 5A|4  
    String jndi = "jdbc/db"; T'YHV}b}vX  
    Context ctx = (Context) new InitialContext().lookup("java:comp/env"); },1**_#<Br  
    DataSource ds = (DataSource) ctx.lookup(jndi); X^204K%:  
    Connection cn = ds.getConnection(); BC!n;IAe  
  多用于jsp中 @ qFE6!  
2、执行sql语句 Qdepzo>E  
  1)用Statement来执行sql语句 epz'GN]V  
  String sql; +Smt8O<N  
  Statement sm = cn.createStatement(); -^A=U7  
  sm.executeQuery(sql); // 执行数据查询语句(select) VjZ_L_U}  
  sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); oh%kuO T[  
  2)用PreparedStatement来执行sql语句 O<}^`4d  
  String sql; *Nfn6lVB  
  sql  = "insert into user (id,name) values (?,?)"; D@]gc&JN[  
  PreparedStatement ps = cn.prepareStatement(sql); #$\cRLPg  
  ps.setInt(1,xxx); &!)F0PN:u  
  ps.setString(2,xxx); [y^)&L$=  
  ... {sn:Lj0  
  ResultSet rs = ps.executeQuery(); // 查询 !sF! (u7  
  int c = ps.executeUpdate(); // 更新 9`[#4'1Mik  
  k:?+75?$  
3、处理执行结果 [,GXA)j  
  查询语句,返回记录集ResultSet y&y(<  
  更新语句,返回数字,表示该更新影响的记录数 ONx|c'0g  
  ResultSet的方法 H<$.AC\zn  
  1、next(),将游标往后移动一行,如果成功返回true;否则返回false >{DHW1kF?  
  2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 6k#H>zY,  
  Bjg 21bw^  
4、释放连接 &&1q@m,cP  
  cn.close(); ]mU,y$IQ  
  一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection tE)%*z@<Lt  
d2H&@80  
可滚动、更新的记录集 +B*8$^,V)  
1、创建可滚动、更新的Statement Q@3.0Hf|{  
  Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); #=WDJ T:  
  该Statement取得的ResultSet就是可滚动的 0m5Q;|mH  
2、创建PreparedStatement时指定参数 /Vpd*obMB  
  PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); T;-Zl[H  
  ResultSet.absolute(9000);  #unE>#DW  
批量更新 T[$Sbz`  
1、Statement #Id.MLHxA_  
  Statement sm = cn.createStatement(); vcB +h;x  
  sm.addBatch(sql1); ]{9oB-;,  
  sm.addBatch(sql2); MDkIaz\U  
  ... :oB4\/(G#  
  sm.executeBatch() +n(H"I7cU  
  一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 H*QN/{|RU  
2、PreparedStatement lwH&4K  
  PreparedStatement ps = cn.preparedStatement(sql); /p,D01Ws}(  
  { TJtW?c7  
  ps.setXXX(1,xxx); S(A0),  
  ... .}fc*2.'  
  ps.addBatch();  =erA.u  
  } oB[3? e  
  ps.executeBatch(); ErC~,5dj;n  
  一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 K*J8(/WkD  
  &QOob)  
事务的处理 T[)) ful  
1、关闭Connection的自动提交 @"9y\1u  
  cn.setAutoCommit(false); [Hdk=p  
2、执行一系列sql语句 | -Di/.  
  要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close /2u;w !oi.  
Statement sm ; 4x'^?0H@  
sm = cn.createStatement(insert into user...); =nnS X-x  
sm.executeUpdate(); rOY^w9!  
sm.close(); {s8''+Q#(-  
sm = cn.createStatement("insert into corp...); "!)8bTW  
sm.executeUpdate(); {CH\TmSz  
sm.close(); &3{:h  
3、提交 gx[#@ (  
  cn.commit(); se_zCS4Y  
4、如果发生异常,那么回滚 [v-?MS  
  cn.rollback();
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

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

您目前还是游客,请 登录注册
如果您在写长篇帖子又不马上发表,建议存为草稿
认证码:
验证问题:
10+5=?,请输入中文答案:十五