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

[JAVA]java 数据库基本操作

t_y
级别: 经院硕士
发帖
2080
铜板
4671
人品值
2716
贡献值
3
交易币
0
好评度
2087
信誉值
0
金币
0
所在楼道
java 数据库基本操作 QApyP CH  
1、java数据库操作基本流程 XAic9SNu;  
2、几个常用的重要技巧: BWK IbG  
    可滚动、更新的记录集 .[pUuVq]  
    批量更新 wyQb5n2`;~  
    事务处理 I0w%8bs  
|r =DBd3  
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 8I#D`yVKc  
1、取得数据库连接 ;bjnL>eW  
  1)用DriverManager取数据库连接 S`g;Y '  
  例子 pM$ @m]  
    String className,url,uid,pwd; uH{'gd,q8  
    className = "oracle.jdbc.driver.OracleDriver"; !D:k!  
    url      = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; MOZu.NmO  
    uid      = "system"; o:\XRPB  
    pwd      = "manager"; @EZ>f5IO+  
    Class.forName(className); /tKGwX]y  
    Connection cn = DriverManager.getConnection(url,uid,pwd); rxE&fjW  
  2)用jndi(java的命名和目录服务)方式 v*TeTA %  
  例子 l)Mh2lA,=  
    String jndi = "jdbc/db"; tbG8MXX  
    Context ctx = (Context) new InitialContext().lookup("java:comp/env"); 0s%6n5>  
    DataSource ds = (DataSource) ctx.lookup(jndi); uw_?O[ZA[  
    Connection cn = ds.getConnection(); &L3 #:jSk  
  多用于jsp中 [MmM9J["  
2、执行sql语句 &HF]\`RNr  
  1)用Statement来执行sql语句 L|67f4  
  String sql; (V9h2g&8L  
  Statement sm = cn.createStatement(); g [L  
  sm.executeQuery(sql); // 执行数据查询语句(select) e-6(F4  
  sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); myvh@@N  
  2)用PreparedStatement来执行sql语句 3M*Y= ?pI  
  String sql; K2|7%  
  sql  = "insert into user (id,name) values (?,?)"; >]/dOH,A  
  PreparedStatement ps = cn.prepareStatement(sql); fValSQc!U  
  ps.setInt(1,xxx); iZTa>@   
  ps.setString(2,xxx); oyvtZ/@  
  ... TzF0/T!  
  ResultSet rs = ps.executeQuery(); // 查询 jgRCs.6  
  int c = ps.executeUpdate(); // 更新 # "r kuDO  
  +Jq`$+%C  
3、处理执行结果 p7[(z  
  查询语句,返回记录集ResultSet Xp^$ E6YFy  
  更新语句,返回数字,表示该更新影响的记录数 DQ_ 2fX~)  
  ResultSet的方法 4A  o{M  
  1、next(),将游标往后移动一行,如果成功返回true;否则返回false s=/^lOOO  
  2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 uBRw>"c_*8  
  ITvHD-,\  
4、释放连接 u}CG>^0C  
  cn.close(); Q X):T#^V  
  一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection <9N4"d !A  
XGk}e4;_  
可滚动、更新的记录集 k~|ZO/X@l%  
1、创建可滚动、更新的Statement BhkAQEsWTQ  
  Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); $i%HDt|  
  该Statement取得的ResultSet就是可滚动的 ZbyG*5iq  
2、创建PreparedStatement时指定参数 m)k-uWc$C  
  PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); o16~l]Z|f  
  ResultSet.absolute(9000);  -x?Hj/  
批量更新 i-"<[*ePd  
1、Statement B$`d&7I;D  
  Statement sm = cn.createStatement(); k(9s+0qe  
  sm.addBatch(sql1); +{^'i P  
  sm.addBatch(sql2); &<t79d%{  
  ... ir+8:./6  
  sm.executeBatch() H<z30r/-w  
  一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 k!vHO  
2、PreparedStatement % &2B  
  PreparedStatement ps = cn.preparedStatement(sql); <G}m#  
  { 8x gc[#  
  ps.setXXX(1,xxx); v C-[#]<  
  ... :SdIU36  
  ps.addBatch(); m&ZJqsZIL  
  } 9JXhHAxD  
  ps.executeBatch(); ^T+<!k  
  一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 Sy:K:Z|[U  
  Y` q!V=  
事务的处理 i _8zjj7  
1、关闭Connection的自动提交 6T]Q.\5BZ  
  cn.setAutoCommit(false); sgD@}":m  
2、执行一系列sql语句 'l8eH$  
  要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close epYj+T  
Statement sm ; I,w^ ?o  
sm = cn.createStatement(insert into user...); i >J:W"W   
sm.executeUpdate(); XWc|[>iO  
sm.close(); WEps.]s  
sm = cn.createStatement("insert into corp...); 7Z VVR*n|  
sm.executeUpdate(); "wF*O"WQo  
sm.close();  L2k;f]  
3、提交 -z&9 DWH  
  cn.commit(); )'w]YIv9  
4、如果发生异常,那么回滚 qPp]K?.  
  cn.rollback();
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

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

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