JAVA数据库基本操作_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2975 | 回复: 0   主题: JAVA数据库基本操作        下一篇 
赖文婷
注册用户
等级:少校
经验:1094
发帖:81
精华:0
注册:2012-11-5
状态:离线
发送短消息息给赖文婷 加好友    发送短消息息给赖文婷 发消息
发表于: IP:您无权察看 2012-11-9 23:34:36 | [全部帖] [楼主帖] 楼主

Java 数据库基本操作

1java数据库操作基本流程

2、几个常用的重要技巧:

可滚动、更新的记录集

批量更新

事务处理 

    java数据库操作基本流程:取得数据库连接 执行sql语句 处理执行结果 释放数据库连接

    1、取得数据库连接

    1)用DriverManager取数据库连接

例子

String className,url,uid,pwd;
className = "oracle.jdbc.driver.OracleDriver";
url       = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr;
uid       = "system";
pwd       = "manager";
Class.forName(className);
Connection cn = DriverManager.getConnection(url,uid,pwd);


  2)用jndi(java的命名和目录服务)方式

例子

String jndi = "jdbc/db";
Context ctx = (Context) new InitialContext().lookup("java:comp/env");
DataSource ds = (DataSource) ctx.lookup(jndi);
Connection cn = ds.getConnection();


多用于jsp

    2、执行sql语句

    1)用Statement来执行sql语句

String sql;
Statement sm = cn.createStatement();
sm.executeQuery(sql); // 执行数据查询语句(select
sm.executeUpdate(sql); // 执行数据更新语句(deleteupdateinsertdrop等)statement.close();


  2)用PreparedStatement来执行sql语句

String sql;
sql  = "insert into user (id,name) values (?,?)";
PreparedStatement ps = cn.prepareStatement(sql);
ps.setInt(1,xxx);
ps.setString(2,xxx);
...
ResultSet rs = ps.executeQuery(); // 查询
int c = ps.executeUpdate(); // 更新


    3、处理执行结果

查询语句,返回记录集ResultSet

更新语句,返回数字,表示该更新影响的记录数

    ResultSet的方法

    1next(),将游标往后移动一行,如果成功返回true;否则返回false

    2getInt("id")getSting("name"),返回当前游标下某个字段的值

    4、释放连接

cn.close();


一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection

可滚动、更新的记录集

    1、创建可滚动、更新的Statement

Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY);


Statement取得的ResultSet就是可滚动的

    2、创建PreparedStatement时指定参数

PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet.absolute(9000);


批量更新

    1Statement

Statement sm = cn.createStatement();
sm.addBatch(sql1);
sm.addBatch(sql2);
...
sm.executeBatch()


一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是deleteupdateinsert等或兼有

    2PreparedStatement

PreparedStatement ps = cn.preparedStatement(sql);
{
      ps.setXXX(1,xxx);
      ...
      ps.addBatch();
}
ps.executeBatch();


一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。

事务的处理

    1、关闭Connection的自动提交

cn.setAutoCommit(false);


 2、执行一系列sql语句

要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close

Statement sm ;
sm = cn.createStatement(insert into user...);
sm.executeUpdate();
sm.close();
sm = cn.createStatement("insert into corp...);
sm.executeUpdate();
sm.close();


 3、提交

cn.commit();


 4、如果发生异常,那么回滚

cn.rollback();




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论