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

[JAVA]java 数据库基本操作

t_y
级别: 经院硕士
发帖
2080
铜板
4671
人品值
2716
贡献值
3
交易币
0
好评度
2087
信誉值
0
金币
0
所在楼道
java 数据库基本操作 F6yFKNK!n  
1、java数据库操作基本流程 06AgY0\  
2、几个常用的重要技巧: 1DcBF@3sWG  
    可滚动、更新的记录集 Q}B]b-c+E  
    批量更新 \a;xJzc9  
    事务处理 -avxH?;?7  
>e6OlIW  
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 ]h`*w  
1、取得数据库连接 18F}3t??  
  1)用DriverManager取数据库连接 q9ra  
  例子 ;AOLbmb)H4  
    String className,url,uid,pwd; =bD.5,F)  
    className = "oracle.jdbc.driver.OracleDriver"; iKPgiL~  
    url      = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; @uRJl$3  
    uid      = "system"; s;oe Qa}TB  
    pwd      = "manager"; hv#$Zo<  
    Class.forName(className); fWEQ vQ  
    Connection cn = DriverManager.getConnection(url,uid,pwd); M("sekL  
  2)用jndi(java的命名和目录服务)方式 w#A\(z%;x  
  例子 i,;eW&  
    String jndi = "jdbc/db"; z-gMk@l  
    Context ctx = (Context) new InitialContext().lookup("java:comp/env"); d6tv4Cf  
    DataSource ds = (DataSource) ctx.lookup(jndi); sNpA!!\PM  
    Connection cn = ds.getConnection(); 6}R*7iM s  
  多用于jsp中 [UzacXt  
2、执行sql语句 B6IKD  
  1)用Statement来执行sql语句 nm<VcCc  
  String sql; AzJ;E tR  
  Statement sm = cn.createStatement(); o[Qb/ 7  
  sm.executeQuery(sql); // 执行数据查询语句(select) GP4!t~"1  
  sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); r?[[.zm"7  
  2)用PreparedStatement来执行sql语句 e'$[PF  
  String sql; qQ)1+^  
  sql  = "insert into user (id,name) values (?,?)"; -|}?+W  
  PreparedStatement ps = cn.prepareStatement(sql); xf;>o$oN0P  
  ps.setInt(1,xxx); UJqh~s  
  ps.setString(2,xxx); IowXVdm@6  
  ... +=9iq3<yfS  
  ResultSet rs = ps.executeQuery(); // 查询 <\$"U5"`  
  int c = ps.executeUpdate(); // 更新 1K/ :  
  1HNP@9ga  
3、处理执行结果 F!hjtIkPj  
  查询语句,返回记录集ResultSet #3_g8ni5X  
  更新语句,返回数字,表示该更新影响的记录数 9VTAs:0D=  
  ResultSet的方法 )ddJ\:  
  1、next(),将游标往后移动一行,如果成功返回true;否则返回false R$l- 7YSt  
  2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 bFN/{^SB  
  n7;jME/!  
4、释放连接 V0>[bzI  
  cn.close(); D['J4B  
  一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection )s:kQ~+  
|0}Xb|+  
可滚动、更新的记录集 T\p>wiY2|F  
1、创建可滚动、更新的Statement )_C>hWvo_  
  Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); /hqn>t  
  该Statement取得的ResultSet就是可滚动的 Z_bVCe{  
2、创建PreparedStatement时指定参数 VS ECD;u4c  
  PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); uZL,%pF3A  
  ResultSet.absolute(9000);  K!9K^h  
批量更新 /77cjesZ9  
1、Statement dO2?&f  
  Statement sm = cn.createStatement(); <S7SH-{_\  
  sm.addBatch(sql1); j$_?g!I=gK  
  sm.addBatch(sql2); ^cPVnl  
  ... &S+*1<|`K  
  sm.executeBatch() z6J12tu  
  一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 K!ogpd&X&  
2、PreparedStatement $#n9C79Z@  
  PreparedStatement ps = cn.preparedStatement(sql); IxUj(l1Fm  
  { oh$"?N7n1  
  ps.setXXX(1,xxx); :^`j:B  
  ... n6Uh%rO7S|  
  ps.addBatch(); c3l(,5DtH  
  } T5}3Y3G,6  
  ps.executeBatch(); E)m \KSwh  
  一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 53aJnxX  
  k?Hi_;o  
事务的处理 LvS5N)[  
1、关闭Connection的自动提交 -6-rX D  
  cn.setAutoCommit(false); Ww8U{f  
2、执行一系列sql语句 )?radg  
  要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close `_)9eGQ  
Statement sm ; U}X'RCM  
sm = cn.createStatement(insert into user...); p<dw  C"z  
sm.executeUpdate(); S[9b I&C  
sm.close(); -eK0 +beQ  
sm = cn.createStatement("insert into corp...); w{T$3F`@9  
sm.executeUpdate(); "2C}Pr ,p8  
sm.close(); eSObOG/  
3、提交 VFZyWX@#u  
  cn.commit(); k0I$x:c  
4、如果发生异常,那么回滚 S_Nm?;P  
  cn.rollback();
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

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

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