JDBC的六大步骤

第一步:注册驱动

三种方式:
1)通过反射
Class.forName(“数据库驱动类的全包类名”);

try {
	Class.forName(driver);
} catch (ClassNotFoundException e) {
	System.out.println("找不到该数据库驱动包");
	e.printStackTrace();
}

2)先创建一个driver对象,然后再将该对象通过DriverManager注册

Driver driver2 = new oracle.jdbc.driver.OracleDriver();
try {
	DriverManager.registerDriver(driver2);
	/*局部变量有效范围是大括号内部,
	所以为了我们方便关闭资源,
	不要将driver声明在try内部*/
} catch (SQLException e) {
	System.out.println("注册数据库驱动失败!");
	e.printStackTrace();
}

3)传入VM系统参数 -Djdbc.driver.driver.OracleDriver
以eclipse为例:
在这里插入图片描述

第二步:建立连接

通过DriverManager类中的静态方法来获取Connection连接对象

Connection conn = null;
try {
	conn = DriverManager.getConnection(url, user, password);
	System.out.println("连接成功");
} catch (SQLException e) {
	System.out.println("数据库连接失败!");
	e.printStackTrace();
}
第三步:创建Statement对象

一般我们常用两种Statement对象

  • Statement对象
//第一种创建statement
Statement st = null;
try{
	st = conn.createStatement();
} catch(SQLException e) {
	e.printStackTrace()
}
  • PreparedStatement对象
PreparedStatement st = null;
try{
	String insertPST = "insert into t_user values(?,?,?)";
	pst = conn.prepareStatement(insertPST);//预编译
} catch(SQLException e) {
	e.printStackTrace()
}

值得一提的是,PreparedStatement对象可以将sql语句进行预编译,大大提高了数据库操作的效率。

第四步:执行SQL语句(execute()系列方法)

这一系列方法是通过Statement或者PreparedStatement对象调用
一般我们使用这三种:

  • executeQuery():主要执行select语句,返回ResultSet对象,这是查询出来的结果集。
Statement st = conn.createStatement();//conn是之前创建的连接对象
String sql = "select id,last_name,salary,start_date from s_emp";
ResultSet rs = st.executeQuery(sql);
  • executeUpdate():主要执行DML语句(除select),返回受影响的行数。
//我们向表中插入十条数据
//这里我们用第二种PreparedStatement
String insertPST = "insert into t_user values(?,?,?)";
/*
* ?是占位符,用来暂时表示数据,这里PreparedStatement对
* sql语句进行了预编译。
*/
PreparedStatement pst = conn.prepareStatement(insertPST);
for (int i = 0; i < 10; i++) {
	//按照占位符的索引依次赋值,索引从1开始,将sql语句补全。
	pst.setInt(1, i);
	pst.setString(2, "PST_test_user");
	pst.setInt(3, 20);
	/*开始执行sql语句,
	* 一定不可以写executeUpdate(insertPst),
	* 否则会将你之前赋的值给覆盖掉。
	*/
	pst.executeUpdate();
}
  • execut():理论上可以执行任何sql语句,当我们做查询操作时,无论查询有没有结果,都返回true,当我们做其他操作时,返回false。
Statement st = conn.createStatement();//conn是之前创建的连接对象
String sql = "select id,last_name,salary,start_date from s_emp";
System.out.println(st.execute(sql));//输出true
第五步:处理结果集resultSet(没有结果集的话可以省略此步)

如果我们上一步用的是executeQuery()方法,那么会返回结果集ResultSet对象,我们来处理一下。

//处理结果集对象
while(rs.next()) {
	//按列名取出数据,ResultSet有一系列的get方法
	int id = rs.getInt("id");
	String last_name = rs.getString("last_name");
	double salary = rs.getDouble("salary");
	Date start_date = rs.getDate("start_date");
	//输出测试一下,样式自定
	System.out.println(id+last_name+salary+start_date);
}
第六步:关闭资源

我们需要关闭的资源就是Statement及其子类和Connection对象,本着先开后毕的原则,我们这样来关闭。

//6)关闭资源(先开的后关)
try {
	if(rs!=null)rs.close();//如果有结果集的话也需要关闭
	if(st!=null)st.close();
	if(conn!=null)conn.close();
} catch (SQLException e) {
	e.printStackTrace();
}

附上一个简单流程测试的完整代码:

package com.briup.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class FirstJDBC {
	public static void main(String[] args) {
		//1)注册驱动(通过驱动类名),导入jar包
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
		} catch (ClassNotFoundException e) {
			System.out.println("找不到类!");
			e.printStackTrace();
		}
		
		/*
		* 关于这里的写法是因为如果我们在try中声明的话,
		* 因为局部变量的生命周期是在所声明的大括号内部,
		* 那么我们在finally语句块就无法将其关闭了
		* 所以我们在外部声明。
		*/
		Connection conn = null;
		Statement st = null;
		ResultSet rs = null;
		
		try {
			//2)获取与数据库的连接
			conn=DriverManager.getConnection(
					"jdbc:oracle:thin:@localhost:1521:XE", 
					"briup", "briup");
			//3)获取Statement对象
			st = conn.createStatement();
			
			String sql="select id,last_name,salary from s_emp";
			//4)执行SQL语句,并拿到结果集
			rs = st.executeQuery(sql);
			//5)处理结果集(ResultSet)
			while(rs.next()) {
				int id = rs.getInt(1);//取出id值
				String name = rs.getString(2);
				double sal = rs.getDouble(3);
				System.out.println("id:"+id+",name:"+name+",salary:"+sal);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			//6)关闭资源
			try {
				if(rs!=null)rs.close();//如果有结果集的话也需要关闭
				if(st!=null)st.close();
				if(conn!=null)conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

本博文乃个人总结,如有错误,还各位指正!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值