jdbc学习总结(一)

 、jdbc简介


JDBC全称为:JavaDatabase Connectivity(java数据库连接),它主要由接口组成。组成JDBC的有2个包:java.sql 和javax.sql。

开发JDBC应用需要以上2个包的支持外,还需要导入相应JDBC的数据库实现(即数据库驱动 ojdbc.jar,mysq/mysql-connector-java-5.1.6-bin.jar/ sql server 有三个包)。

二 、第一个jdbc程序

package cn.sp.test;
import java.sql.*;

import oracle.jdbc.driver.OracleDriver;
public class TestJdbc {
	
	//使用jdbc去操作 oracle 数据库
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Connection ct=null;
		Statement statement=null;
		try {
			//1加载驱动
			Class.forName("oracle.jdbc.driver.OracleDriver");
			//DriverManager.registerDriver(new OracleDriver());
			//2得到连接
			ct=DriverManager.getConnection
			("jdbc:oracle:thin:@127.0.0.1:1521:orclhsp", "scott", "tiger");
			
			//把事务设为不自动提交
			ct.setAutoCommit(false);
			//3.创建sql对象(Statement / PreparedStatement /CallableStatement)
			statement=ct.createStatement();
			//4.通过statement向数据库发出sql 指令.
		/*	int n=statement.executeUpdate
			("insert into user1 values(user1_seq.nextval,'顺平','123'," +
					"'shunping@sohu.com',sysdate,30)"); //executeupdate 执行dml(update/insert/delete)*/
			//需求: 对emp表进行操作: 把SMITH 的sal -10 给 KING sal+10
			statement.executeUpdate("update emp set sal=sal-10 where ename='SMITH'");
			int i=9/0;
			statement.executeUpdate("update emp set sal=sal+10 where ename='KING'");
			//提交所有事务
			ct.commit();
			
		} catch (Exception e) {
			
			e.printStackTrace();
			//如果 sql 语句中任何语句错误,则可以整体回滚.
			try {
				ct.rollback();
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			// TODO: handle exception
		}finally{
			
			//关闭资源[先开后闭];
			if(statement!=null){
				try {
					statement.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				statement=null;//使用垃圾回收.
			}
			if(ct!=null){
				try {
					ct.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				ct=null;
			}
		}	
	}

}

面试题: 什么时候,需要把 setAtuoCommit设为 false?

答:当有多个dml 同时执行,将其看做一个整体提交,则使用 事务管理 ,则需要把setAutoCommit 设为false。



在默认情况下,我们的rs结果集,只能向前移动,这样rs 结果就不能复用 ,如果希望复用,则可以这样做:

//通过java 来查询所有的雇员.

//假设我们希望rs结果,可以滚动(可以向前,亦可向后)

ResultSet 的可选项有:

resultSetType - 结果集类型,它是 ResultSet.TYPE_FORWARD_ONLY、ResultSet.TYPE_SCROLL_INSENSITIVE 或 ResultSet.TYPE_SCROLL_SENSITIVE 之一

resultSetConcurrency - 并发类型;它是 ResultSet.CONCUR_READ_ONLY 或ResultSet.CONCUR_UPDATABLE 之一

statement=ct.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
			rs=statement.executeQuery("select * from emp");
			//循环取出
			while(rs.next()){
				System.out.println(rs.getInt("empno")+" 名字"+rs.getString("ename"));
			}
			
			//如果我们希望,重新使用rs
			rs.beforeFirst();
System.out.println("*********************");
			while(rs.next()){
				System.out.println(rs.getInt("empno")+" 名字"+rs.getString("ename"));
			}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值