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

[JAVA]java 数据库基本操作

t_y
级别: 经院硕士
发帖
2080
铜板
4671
人品值
2716
贡献值
3
交易币
0
好评度
2087
信誉值
0
金币
0
所在楼道
java 数据库基本操作 Zv1/J}+  
1、java数据库操作基本流程 ;ZLfb n3\  
2、几个常用的重要技巧: IQ}YF]I;  
    可滚动、更新的记录集 FkIT/H  
    批量更新 4}=Z+tDu>  
    事务处理 []eZO_o6j  
_;5N@2?  
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 9RN! <`H  
1、取得数据库连接 2Y{r2m|o  
  1)用DriverManager取数据库连接 _M}}H3  
  例子 |/p2DU2  
    String className,url,uid,pwd; '4d+!%2t  
    className = "oracle.jdbc.driver.OracleDriver"; q1o)l  
    url      = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; u'EzYJ7  
    uid      = "system"; ~bk+JK- >  
    pwd      = "manager"; W(UrG]J*l  
    Class.forName(className); #_OrS/H  
    Connection cn = DriverManager.getConnection(url,uid,pwd); |zSoA=7?  
  2)用jndi(java的命名和目录服务)方式 <DM:YWNa  
  例子 i/WiSwh:  
    String jndi = "jdbc/db"; l ilF _ y  
    Context ctx = (Context) new InitialContext().lookup("java:comp/env"); GGwHz]1L  
    DataSource ds = (DataSource) ctx.lookup(jndi); be{tyV  
    Connection cn = ds.getConnection(); *+'l|VaVq\  
  多用于jsp中 .1& F p  
2、执行sql语句 0(dXU\Y  
  1)用Statement来执行sql语句 ns1@=f cO  
  String sql; n*fsdo~  
  Statement sm = cn.createStatement(); ,;wc$-Z!8  
  sm.executeQuery(sql); // 执行数据查询语句(select) f)K1j{TZ  
  sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); q'awV5y  
  2)用PreparedStatement来执行sql语句 E#cZM>  
  String sql; .9;wJ9Bw[  
  sql  = "insert into user (id,name) values (?,?)"; .EQ1r7 9,  
  PreparedStatement ps = cn.prepareStatement(sql); k%?A=h  
  ps.setInt(1,xxx); eMC0 )B  
  ps.setString(2,xxx); %]i("21  
  ... u9%)_Q!14  
  ResultSet rs = ps.executeQuery(); // 查询 >T~d uwS  
  int c = ps.executeUpdate(); // 更新 -( ,iwF b  
  VWa;;?IK  
3、处理执行结果 JmK[7t  
  查询语句,返回记录集ResultSet BPzlt  
  更新语句,返回数字,表示该更新影响的记录数 -%x9^oQwY  
  ResultSet的方法 14v,z;HXj  
  1、next(),将游标往后移动一行,如果成功返回true;否则返回false  =:-x;  
  2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 YV0K&d  
  bfjtNF*^  
4、释放连接 *z A1NH5  
  cn.close(); S7 Tem:/  
  一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection 2r=A'  
FO5'<G-  
可滚动、更新的记录集 !EQMTF=(  
1、创建可滚动、更新的Statement +b]+5!  
  Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); <+c6CM$#}V  
  该Statement取得的ResultSet就是可滚动的 7&z`N^dz{  
2、创建PreparedStatement时指定参数 "ewB4F[  
  PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); 9>"To  
  ResultSet.absolute(9000);  kdry a  
批量更新 M%8:  
1、Statement 5#U*vGVT  
  Statement sm = cn.createStatement(); UF00K1dbz  
  sm.addBatch(sql1); ,HQaS9vBQ  
  sm.addBatch(sql2); 0vRug|}k#%  
  ... aGz <Yip  
  sm.executeBatch() qrmJJSJ  
  一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 <ZM8*bqi  
2、PreparedStatement =,=tSp  
  PreparedStatement ps = cn.preparedStatement(sql); }TCOm_Y/qL  
  { n3kYVAgF  
  ps.setXXX(1,xxx); M6J/S  
  ... CL$mK5u  
  ps.addBatch(); :A{ US9D  
  } |H4/a;]~  
  ps.executeBatch(); \;>idbV  
  一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 &v^LxLt+s  
  E}$K&<J'-  
事务的处理 -l!;PV S|  
1、关闭Connection的自动提交 QDC]g.x  
  cn.setAutoCommit(false); >Cjb|f3'i}  
2、执行一系列sql语句 W%=b|6E  
  要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close T?+xx^wYk  
Statement sm ; vO)nqtw  
sm = cn.createStatement(insert into user...); sc! e$@U  
sm.executeUpdate(); v* nX  
sm.close(); E30VKh |  
sm = cn.createStatement("insert into corp...); J !:ss  
sm.executeUpdate(); Iz#h:O  
sm.close(); (Js'(tBhiU  
3、提交 >_y>["u6J#  
  cn.commit(); 7='M&Za  
4、如果发生异常,那么回滚 U9KnW]O%"  
  cn.rollback();
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

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

您目前还是游客,请 登录注册
温馨提示:欢迎交流讨论,请勿纯表情、纯引用!
认证码:
验证问题:
3+5=?,请输入中文答案:八 正确答案:八