JDBC简单整理1

JDBC简单整理1

JDBC介绍及简单入门

    前段时间已经整理过了关于怎么使用JDBC,操作的数据库的博客,包括OracleSQL Server,其实用JDBC的方式只是加载驱动和获取连接时不同。其他各种操作基本一致。

特附上博客链接:Java操作数据库Java操作Oracle

 

案例:

package com.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * 
 * @author Switch
 * 功能:Oracle,JDBC测试1
 *
 */
public class JDBC1 {
	public static void main(String[] args) {
		Connection ct = null;
		Statement st = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			// 1.加载驱动
			Class.forName("oracle.jdbc.driver.OracleDriver");
			// 2.获得连接
			ct = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:SWITCH", "scott", "123456");
			// 3.创建(PreparedStatement(常用),Statement)
			st = ct.createStatement();
			// ps = ct.prepareStatement("insert into user1 values(user1_seq.nextval,?,?,?,sysdate,?)");
			// 给?赋值
			// ps.setString(1, "张三");
			// ps.setString(2, "123456");
			// ps.setString(3, "zs@123.com");
			// ps.setInt(4, 20);
			
			// 4.执行操作
			int n = st.executeUpdate("insert into user1 values(user1_seq.nextval,'张三','123456','zs@123.com',sysdate,20)");
			// int n = ps.executeUpdate();
			if(n != 0){
				System.out.println("插入成功");
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			// 先开后闭
			if(st != null){
				try {
					st.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				// 使用垃圾回收机制回收
				st = null;
			}
			if(ct != null){
				try {
					ct.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				// 使用垃圾回收机制回收
				ct = null;
			}
		}
	}
}

Connection接口

    Connection接口提供了对数据库的连接,通过操作Connection对象,可以进行事务操作,也可以创建Statement,PreparedStatement,CallableStatement,还可以通过所定义的各种成员常量来控制所获取的ResultSet的可操作方式等等。

 

案例:

package com.jdbc;
import java.sql.*;
import oracle.jdbc.driver.OracleDriver;
public class JDBC3{
	
	//使用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", "123456");
			
			//把事务设为不自动提交
			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,'张三','123456'," +
					"zhangsan@123.com',sysdate,20)"); //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;
			}
		}
	}
}

ResultSet

    ResultSet接收的是一张表格,通过对其游标(Cursor)的操作可以指向任意一行,再用提供的成员方法对当前行的任意一项进行操作。

PS:在我的理解,ResultSet是结果集的意思,对应于一段查询出来的表格或者结果,通过它可以很方便的获取相应的查询信息,一般来说会将ResultSet进行二次封装成ArrayList集合。

案例:

package com.jdbc;

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 
 * @author Switch 功能:测试ResultSet
 * 
 */
public class JDBC2 {
	public static void main(String[] args) {
		Connection ct = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			// 1、 获取驱动
			Class.forName("oracle.jdbc.driver.OracleDriver");
			// 2、 获取连接
			ct = DriverManager.getConnection(
					"jdbc:oracle:thin:@127.0.0.1:1521:SWITCH", "scott",
					"123456");
			// 3、创建PreparedStatement,希望rs结果能够滚动,并发时只读
			ps = ct.prepareStatement("select * from emp",
					ResultSet.TYPE_SCROLL_INSENSITIVE,
					ResultSet.CONCUR_READ_ONLY);
			// 给?赋值
			// 4、执行操作
			rs = ps.executeQuery();
			// 5、操作结果
			System.out.println("编号 姓名");
			while (rs.next()) {
				System.out.println(rs.getInt("EMPNO") + " "
						+ rs.getString("ENAME"));
			}
			// 重新跳转到第一行
			rs.beforeFirst();
			System.out.println("-------2------");
			while (rs.next()) {
				System.out.println(rs.getInt("EMPNO") + " "
						+ rs.getString("ENAME"));
			}

			// 定位到第3行
			rs.absolute(3);
			System.out.println("-------3------");
			System.out
					.println(rs.getInt("EMPNO") + " " + rs.getString("ENAME"));

			// 第3行的前一行
			rs.previous();
			System.out.println("-------4------");
			System.out
					.println(rs.getInt("EMPNO") + " " + rs.getString("ENAME"));

			// 这几个方法是常用的游标定位方法,要配合
			// ps = ct.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE,
			// ResultSet.CONCUR_READ_ONLY);使用
			// 定位到第几行
			// rs.absolute(row);
			// 最后一行
			// rs.last();
			// 是否最后一行
			// rs.isLast();
			// 最后一行的后一行
			// rs.afterLast();
			// 第一行
			// rs.first();
			// 是否第一行
			// rs.isFirst();
			// 第一行前一行
			// rs.beforeFirst();

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			// 先开后闭
			if (rs != null) {
				try {
					rs.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				// 使用垃圾回收机制回收
				rs = null;
			}
			if (ps != null) {
				try {
					ps.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				// 使用垃圾回收机制回收
				ps = null;
			}
			if (ct != null) {
				try {
					ct.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				// 使用垃圾回收机制回收
				ct = null;
			}
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值