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

[JAVA]java 数据库基本操作

t_y
级别: 经院硕士
发帖
2080
铜板
4671
人品值
2716
贡献值
3
交易币
0
好评度
2087
信誉值
0
金币
0
所在楼道
java 数据库基本操作 4R.#=]F  
1、java数据库操作基本流程 G9]GK+@&F  
2、几个常用的重要技巧: 6[i-Tl  
    可滚动、更新的记录集  _~r>C  
    批量更新 xE:p)B-]  
    事务处理 6K6ihR!d  
v "07H  
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 NB[b[1 Ch  
1、取得数据库连接 mOBS[M5*  
  1)用DriverManager取数据库连接 8V@3T/}  
  例子 vU _#(jZ  
    String className,url,uid,pwd; [>fE{ ~Y  
    className = "oracle.jdbc.driver.OracleDriver"; (_D#gr{S=  
    url      = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; eG<32$I  
    uid      = "system"; z`W$/tw"  
    pwd      = "manager"; u+N[Cgh  
    Class.forName(className); N9hBGa$  
    Connection cn = DriverManager.getConnection(url,uid,pwd); /Bc ;)~  
  2)用jndi(java的命名和目录服务)方式 h c "n?  
  例子 #u>JCPz  
    String jndi = "jdbc/db"; 8"? t6Z;5  
    Context ctx = (Context) new InitialContext().lookup("java:comp/env"); Q%6*S!~  
    DataSource ds = (DataSource) ctx.lookup(jndi); {ES3nCL(8  
    Connection cn = ds.getConnection(); 9d v+u6)  
  多用于jsp中 FXIQS'  
2、执行sql语句 z}Q54,9m  
  1)用Statement来执行sql语句 \ /o`CV{O  
  String sql; jl@xcs]#  
  Statement sm = cn.createStatement(); ke/QFN-`  
  sm.executeQuery(sql); // 执行数据查询语句(select) `5 bHZ  
  sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); 0HE@L_$;2  
  2)用PreparedStatement来执行sql语句 SOd(& >  
  String sql; ZJS7#<-7o  
  sql  = "insert into user (id,name) values (?,?)"; \'shnzs  
  PreparedStatement ps = cn.prepareStatement(sql); ;s{rJG{inG  
  ps.setInt(1,xxx); Rv }e+5F  
  ps.setString(2,xxx); 6B&':N98  
  ... 0q81H./3  
  ResultSet rs = ps.executeQuery(); // 查询 i-$]Tg  
  int c = ps.executeUpdate(); // 更新 /Ue~W, |  
  ) "'J]6  
3、处理执行结果 3(X"IoNQ  
  查询语句,返回记录集ResultSet (2 X`imJ  
  更新语句,返回数字,表示该更新影响的记录数 X ZfT;!wF&  
  ResultSet的方法 +Bgy@.a?  
  1、next(),将游标往后移动一行,如果成功返回true;否则返回false /S%{`F=  
  2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 b:oB $E  
  )jvYJ9s  
4、释放连接 {qK>A?9  
  cn.close(); &W*9'vSm.  
  一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection nF]lSg&]X  
(wkeo{lx  
可滚动、更新的记录集 @#;2P'KL  
1、创建可滚动、更新的Statement Y'wQ(6ok  
  Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); =5isT  
  该Statement取得的ResultSet就是可滚动的 a(QYc?u  
2、创建PreparedStatement时指定参数 ZJ1 %  
  PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); Enyx+]9  
  ResultSet.absolute(9000);  ,iV|^]X3$/  
批量更新 -Z9e}$q$,  
1、Statement g,*LP  
  Statement sm = cn.createStatement(); U*b1yxt  
  sm.addBatch(sql1); [WW3'= e^  
  sm.addBatch(sql2);  Q#i[Y?$L  
  ... &c%;Lo  
  sm.executeBatch() R^4JM,v9x`  
  一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 N$i!25F`  
2、PreparedStatement /SO 4O|b  
  PreparedStatement ps = cn.preparedStatement(sql); J sde+G,N  
  { {FNmYneh?6  
  ps.setXXX(1,xxx); Y {a#2(xn  
  ... 7b7@"Zw*  
  ps.addBatch(); hV_bm@f/y  
  } VXX7Y? !  
  ps.executeBatch(); >NDI<9<'0}  
  一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 j#6@ cO'`  
  /x\{cHAt8J  
事务的处理 z$C}V/Ey  
1、关闭Connection的自动提交 [M?'N w/[S  
  cn.setAutoCommit(false); AUBZ7*VO  
2、执行一系列sql语句 dz_~_|  
  要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close 3 vr T`  
Statement sm ; P3Ocfpf Bp  
sm = cn.createStatement(insert into user...); @M=xdZNyJ  
sm.executeUpdate(); <u`m4w  
sm.close(); U~H]w ,^  
sm = cn.createStatement("insert into corp...); re[v}cB  
sm.executeUpdate(); D[#6jJ Ab  
sm.close(); d^pzMaCI  
3、提交 Y~,ZBl,  
  cn.commit(); mQwP-s  
4、如果发生异常,那么回滚 m}`!FaB #  
  cn.rollback();
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

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

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