当前位置: 首页 > 工具软件 > goracle > 使用案例 >

JDBC连接Oracle11g(附jar包)

苏弘盛
2023-12-01
  •  ​​​​JDBC简介

JDBC全称为:Java DataBase Connectivity(java数据库连接)。SUN公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC。 

  • 编写JDBC程序的步骤

  1. 导包(导入厂商提供的数据库驱动)  

  2. 注册驱动

  3. 连接数据库

  4. 操作数据库(执行sql)

  5. 关闭资源

  • JDBC中的类

1.DriverManager : 用于注册驱动,获得连接。 

DriverManager.registDriver(new Driver()),这种注册驱动方式实际开发中不用。在驱动类的代码中,有一个静态代码块已经做了注册驱动的事情。 所以我们只需要加载驱动类,就相当于调用了 registDriver 方法。如果调用registDriver 方法, 那么相当于创建了两个Driver对象,浪费资源.

所以开发中使用Class.forName("com.mysql.jdbc.Driver")方法注册驱动。驱动类的名称是以字符串的形式填写,那么我们把该名称放到配置文件中,每次从配置文件中读取. 那么切换驱动类就非常方便. 也就意味着切换数据库方便.

2.Connection : 代表连接 , 获得Statement对象

DriverManager.getConnection("url","用户名","密码");

void setAutoCommit(boolean autoCommit) 设置是否自动提交

void commit() 提交

void rollback() 回滚

Savepoint setSavepoint(String name) 设置保存点

Statement createStatement() 创建statement对象

CallableStatement prepareCall(String sql) 调用数据库的存储过程

PreparedStatement prepareStatement(String sql) 创建 PreparedStatement 对象

3.Statement : 运送sql语句

该对象可以理解为一个 向数据库运送sql语句的 "小车";

方法:

void addBatch(String sql) 向车上添加语句. (用于批量执行sql语句); insert update delete

int[] executeBatch() 将车上的语句 运送给数据库执行. 返回值存放每个语句执行后影响的行数. 因为是多个语句,所以用数组装.

void clearBatch() 清除车上的语句.

----以上3个方法是批量执行sql相关的----------------------

boolean execute(String sql) 执行一个sql语句. 如果该语句返回结果集 返回值为true(select). 如果该语句不返回结果集 返回false(insert update delete);

ResultSet executeQuery(String sql) 执行一个有结果集的查询. 会将结果集包装到resultset对象中.(select)

int executeUpdate(String sql) 执行一个没有结果集的语句. 会将语句影响的行数返回.(insert update delete)

开发时一般用PrepareStatement方法,使用PrepareStatement对象 在执行sql语句时,会分为两步. 第一步将sql语句 "运送" 到mysql上编译. 再回到 java端 拿到参数 运送到mysql端. 用户填写的 sql语句,就不会参与编译. 只会当做参数来看. 避免了sql注入问题;

4.ResultSet : 运行的结果

当执行的语句是查询语句时, resultSet对象用于封装查询结果.

方法:

boolean next() 该方法让结果集中的指针(游标)往下移动一行.并且判断改行是否有数据。 有返回true,没有返回false

String getString(int cloumnCount) 从当前指向的行中获得String 类型的数据. 根据列所在的索引位置取.

String getString(String columnName) 从当前指向的行中获得String 类型的数据. 根据列名取.

getXXX系列方法 有很多种, 没个针对的都是数据库中的不同类型.

char/varchar---getString   int---getInt  bigint---getLong  float/double---getFloat/getDouble 

datetime/timestamp---getDate(只表达年月日)/getTimeStamp(表达年月日时分秒)

  • JDBC查询案例

数据库位Oracle11g,需要的jar包为ojdbc6.jar     

点击【下载地址】

下载地址   提取码: sfwh

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.junit.Test;

public class OracleJdbc {
	@Test
	public void testOracle() {
		Connection conn = null;// 创建一个数据库连接
		PreparedStatement ps = null;// 创建预编译语句对象,用这个不用Statement
		ResultSet resultSet = null;// 创建一个结果集对象
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");// 加载Oracle驱动程序,不用DriverManager
			String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";// Oracle地址
			String user = "scott";// 数据库用户名
			String password = "tiger";// 数据库密码
			conn = DriverManager.getConnection(url, user, password);// 获取连接
			String sql = "select * from student where name=?";// 预编译语句,“?”代表参数
			ps = conn.prepareStatement(sql);// 实例化预编译语句
			ps.setString(1, "小李");// 设置参数,前面的1表示第一个问号(第二个问号就用2)
			resultSet = ps.executeQuery();// 执行查询
			while (resultSet.next()) {// 当结果集不为空时
				System.out.println(resultSet.getString("age"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 从小到大释放. resultSet < Statement < Connection
			// 释放时调用close方法即可. 如果其中一个对象的关闭 出现了异常. 也要保证其他的对象关闭方法被调用.
			try {
				if (resultSet != null) {
					resultSet.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				try {
					if (ps != null) {
						ps.close();
					}
				} catch (SQLException e) {
					e.printStackTrace();
				} finally {
					try {
						if (conn != null) {
							conn.close();
						}
					} catch (SQLException e) {
						e.printStackTrace();
					}
				}
			}
		}
	}
}

 

 类似资料: