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

[JAVA]java 数据库基本操作

t_y
级别: 经院硕士
发帖
2080
铜板
4671
人品值
2716
贡献值
3
交易币
0
好评度
2087
信誉值
0
金币
0
所在楼道
java 数据库基本操作 g(9*!g  
1、java数据库操作基本流程 bj}Lxc],  
2、几个常用的重要技巧: RrvC}9ar  
    可滚动、更新的记录集 IHdA2d?.]  
    批量更新 ,|s*g'u  
    事务处理 bsDA&~)s  
((+XzV>  
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 r'jUB^E  
1、取得数据库连接 n"T ^  
  1)用DriverManager取数据库连接 tp}/>gU!  
  例子 cI'n[G  
    String className,url,uid,pwd; 9Y'pT.Gy b  
    className = "oracle.jdbc.driver.OracleDriver"; EW(bM^dk}  
    url      = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; RSh_~qMX  
    uid      = "system"; vReX7  
    pwd      = "manager"; N-?5[T"  
    Class.forName(className); c0'ryS_Z9  
    Connection cn = DriverManager.getConnection(url,uid,pwd); D<d, 9S,)  
  2)用jndi(java的命名和目录服务)方式 8 5X}CCQ  
  例子 4r7F8*z  
    String jndi = "jdbc/db"; rAfz?  
    Context ctx = (Context) new InitialContext().lookup("java:comp/env"); y ;Cs#eo  
    DataSource ds = (DataSource) ctx.lookup(jndi); F`m}RL]g  
    Connection cn = ds.getConnection(); o=_7KWOA  
  多用于jsp中 -yBKA]"<I  
2、执行sql语句 & H%/.4la  
  1)用Statement来执行sql语句 !e$ZOYe  
  String sql; {%G9iOV.  
  Statement sm = cn.createStatement(); PXYLL X\3  
  sm.executeQuery(sql); // 执行数据查询语句(select) sWte&  
  sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); k:Y\i]#yP  
  2)用PreparedStatement来执行sql语句 O&BvWik  
  String sql; A~PR  
  sql  = "insert into user (id,name) values (?,?)"; TT/H"Ri}Jp  
  PreparedStatement ps = cn.prepareStatement(sql); zUL,~u  
  ps.setInt(1,xxx); QF/_?Tm4  
  ps.setString(2,xxx); M%`CzCL u  
  ... /HLI9  
  ResultSet rs = ps.executeQuery(); // 查询 2I [zV7 @t  
  int c = ps.executeUpdate(); // 更新 ` = O  
  `6)Qi*Z  
3、处理执行结果 %S;AM\o4  
  查询语句,返回记录集ResultSet 6!"wiM"]  
  更新语句,返回数字,表示该更新影响的记录数 %rG4X  
  ResultSet的方法 8#yu.\N.xt  
  1、next(),将游标往后移动一行,如果成功返回true;否则返回false dT*Yv`h  
  2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 H5x7)1Ir|  
  Kh\ 7%>K#  
4、释放连接 d,Aa8I  
  cn.close(); L? DlR hu  
  一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection 9=ygkPY  
{73V?#P4  
可滚动、更新的记录集 F1stRZ1ZI  
1、创建可滚动、更新的Statement {\D &*  
  Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); KJ'ID  
  该Statement取得的ResultSet就是可滚动的 qx5`lm~L  
2、创建PreparedStatement时指定参数 'Gl~P><e  
  PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); z1Bi#/i  
  ResultSet.absolute(9000);  \L(cFjLIl  
批量更新 P-Y_$Nv0g  
1、Statement  C7ivA h  
  Statement sm = cn.createStatement(); ]5"k%v|  
  sm.addBatch(sql1); ?d-w#<AiV  
  sm.addBatch(sql2); BA: x*(%~  
  ... 'c7nh{F  
  sm.executeBatch() &~P4yI;,  
  一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 1OM Xg=Y  
2、PreparedStatement }8x+F2i  
  PreparedStatement ps = cn.preparedStatement(sql); "a)6g0gw  
  { " _2 k 3  
  ps.setXXX(1,xxx); T<pG$4_  
  ... w-pgtO|Us  
  ps.addBatch(); \t7yH]:>@  
  } !6'N-b1  
  ps.executeBatch(); 6XWNJb  
  一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 4-.K<-T%D  
  b!@PS$BTxq  
事务的处理 }4YzP 4  
1、关闭Connection的自动提交 HXa[0VOx  
  cn.setAutoCommit(false); .g*N +T6O  
2、执行一系列sql语句 X>[i<ei  
  要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close (0NffM1  
Statement sm ; gUru=p  
sm = cn.createStatement(insert into user...); 88osWo6rG  
sm.executeUpdate(); 60!%^O =  
sm.close(); _eiqs  
sm = cn.createStatement("insert into corp...); 6/8K2_UeoW  
sm.executeUpdate(); (NvjX})eh  
sm.close(); T"z<D+ pN  
3、提交 6h>#;M  
  cn.commit(); ;bB#P g  
4、如果发生异常,那么回滚 hi[nUG(OI  
  cn.rollback();
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

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

您目前还是游客,请 登录注册
欢迎提供真实交流,考虑发帖者的感受
认证码:
验证问题:
10+5=?,请输入中文答案:十五