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

[JAVA]java 数据库基本操作

t_y
级别: 经院硕士
发帖
2080
铜板
4671
人品值
2716
贡献值
3
交易币
0
好评度
2087
信誉值
0
金币
0
所在楼道
java 数据库基本操作 ttY[\D&ZS  
1、java数据库操作基本流程 w3FEX$`_  
2、几个常用的重要技巧: n um2HtU&%  
    可滚动、更新的记录集 &*; Z(ul&9  
    批量更新 #F#M<d3-2  
    事务处理 "h:#'y$V  
kZ'wXtBYe  
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 T\ [CQO  
1、取得数据库连接 h|.{dv  
  1)用DriverManager取数据库连接 /hYFOZ  
  例子  QB#_Wn  
    String className,url,uid,pwd; /Zg4JQ~  
    className = "oracle.jdbc.driver.OracleDriver"; `S|T&|ad0  
    url      = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; dMK\ y4#i  
    uid      = "system"; B:6VD /qC  
    pwd      = "manager"; #ds@!u+&  
    Class.forName(className);  g^))  
    Connection cn = DriverManager.getConnection(url,uid,pwd); fv:&?gc  
  2)用jndi(java的命名和目录服务)方式 a*qc  
  例子 i2!0bY  
    String jndi = "jdbc/db"; y'_2|5!Qs  
    Context ctx = (Context) new InitialContext().lookup("java:comp/env"); c@ lH  
    DataSource ds = (DataSource) ctx.lookup(jndi); il7gk<  
    Connection cn = ds.getConnection(); o`.5NUn  
  多用于jsp中 V U~r~  
2、执行sql语句 \9 k3;zw  
  1)用Statement来执行sql语句 6SEq 2   
  String sql; r#w.y g4EX  
  Statement sm = cn.createStatement(); [_HOD^  
  sm.executeQuery(sql); // 执行数据查询语句(select) `.F3&pA  
  sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); W];l[D<S*  
  2)用PreparedStatement来执行sql语句 2U) 0k *  
  String sql; -+W E9  
  sql  = "insert into user (id,name) values (?,?)"; MS& 'Nj  
  PreparedStatement ps = cn.prepareStatement(sql); #0c;2}D  
  ps.setInt(1,xxx); ldr~=<hsZ  
  ps.setString(2,xxx); |H;+9(  
  ... YXDuhrs}  
  ResultSet rs = ps.executeQuery(); // 查询 j# n  
  int c = ps.executeUpdate(); // 更新 w\ddC DZ  
  R T/)<RT9  
3、处理执行结果 -EG=}uT['b  
  查询语句,返回记录集ResultSet <X ([VZ  
  更新语句,返回数字,表示该更新影响的记录数 X{P=2h#g  
  ResultSet的方法 >njX=r.  
  1、next(),将游标往后移动一行,如果成功返回true;否则返回false U4h5K}j4  
  2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 c>BDw<  
  Ag} P  
4、释放连接 ]\*_}  
  cn.close(); !rff/0/x"  
  一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection ]l6niYVB2  
j>Cp4  
可滚动、更新的记录集 4M P8t@z  
1、创建可滚动、更新的Statement [p_<`gU?  
  Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); cg^=F_h  
  该Statement取得的ResultSet就是可滚动的 !CR#Fyt+9  
2、创建PreparedStatement时指定参数 :i* =s}cv  
  PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); 9S8V`aC  
  ResultSet.absolute(9000);  ) h=[7}|  
批量更新 V:2{LR<R8  
1、Statement uuYeXI;  
  Statement sm = cn.createStatement(); Vj6 w7hz  
  sm.addBatch(sql1); 9z7rv,  
  sm.addBatch(sql2); uVa`2]NV r  
  ... H.&"~eH  
  sm.executeBatch() n= FOB0=  
  一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 !&R|P|7qN}  
2、PreparedStatement w6|l ~.$=  
  PreparedStatement ps = cn.preparedStatement(sql); H Yw7*  
  { K1zH\wH  
  ps.setXXX(1,xxx); f s2}a  
  ... K?*p|&Fi?8  
  ps.addBatch(); !YX_k<1E  
  } ~xf uq{L;  
  ps.executeBatch(); (B Ig  
  一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 =jvL2ps<  
  |J:m{  
事务的处理 #&ayWef  
1、关闭Connection的自动提交 X- `PF  
  cn.setAutoCommit(false); cRP!O|I`]  
2、执行一系列sql语句 ;Hn>Ew  
  要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close ;OSEMgB1  
Statement sm ; C#P7@JE  
sm = cn.createStatement(insert into user...); Fz2C XC  
sm.executeUpdate(); ICzcV };$  
sm.close(); I$*LMzve  
sm = cn.createStatement("insert into corp...); jfpbD /  
sm.executeUpdate(); o&Y R\BI/  
sm.close(); ,D\}DJ`)C  
3、提交 e(vnnv?R{  
  cn.commit(); {0 L)B{|  
4、如果发生异常,那么回滚 JsDT  
  cn.rollback();
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

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

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