Java连接Oracle方法详解

导入驱动包

首先我们得导入Oracle的驱动包,在Oracle安装目录下可以找到,导入它。
具体位置是:app\计算机用户名\product\11.2.0\dbhome_1\jdbc\lib
可能有的人不太一样,但是大致都差不多,像我就没有dbhome_1这个文件夹。我是直接进入的jdbc。
如下图,
在这里插入图片描述
选择一个将它拖入到java项目中,选择copy即可
在这里插入图片描述
然后右键点击它,单击build path/构建路径,点击添加至构建路径。完成后会出现一个引用的库。如下图
在这里插入图片描述
ojdbc6.jar里面就有Oracle的驱动包。它能够让你的java程序驱动Oracle数据库,像浏览器的Driver就可以控制浏览器一样。

连接数据库

一,加载类

使用Class.forName(String driverClass) 将Oracle的driver加载到内存,并与DriverManager建立联系。当程序使用Oracle数据库时,能够在DriverManager中找到其驱动。
其参数有一个和三个两种。对于driverClass,就是Oracle驱动程序类所在的包。如果你前面导入了,那driverClass就是 “oracle.jdbc.driver.OracleDriver” 。这样就把OracleDriver加载到内存,并且将其内部的静态代码执行。

二,建立连接

DriverManager类,它可以使用户程序和数据库的驱动程序之间建立连接。通过getConnection()方法可以建立连接,如果连接成功返回Connection对象,失败抛出SQLException异常。

getConnection(String url, String user, String password)

第一个参数使连接数据库的url,第二个是用户名,第三个参数是密码。

url值一般为: “jdbc:oracle:thin:@localhost:1521:xe”
其中的localhost就是本机ip,可以将其修改为127.0.0.1或者是在命令行下输入ipconfig后的ip。

1521是数据库使用的端口,默认为1521。查看方法是:打开app\oracle\product\11.2.0\server\network\ADMIN\tnsnames.ora文件,其中的port就是端口号。

在这里插入图片描述

xe是数据库名,在Oracle命令行下使用语句select name from v$database; 查看,如图:
在这里插入图片描述
或者在刚才打开的文件中也能看到。

三,接收返回对象

上面我们说了DriverManager.getConnection() 返回的是Connection对象。那我们后续如果想要继续操控已连接完的数据库的话,比如增删改查等,都需要操作它返回的Connection对象。
可能有人有些疑惑了。都已经连接上数据库了,为什么非得使用Connection接口来操作数据库,而不是直接在DriverManager中操作。其实我个人感觉如果世界上只有一种数据库的话确实不太需要Connection,但数据库种类太多了,每次使用java连接不同的数据库都需要加载不同的driver。每个数据库厂商都写一个使用方法的话对于开发人员来说简直是噩梦,那不如你们谁都别写了,我Java自己规定一套使用方法,不管啥数据库都得使用我这套方法。

Connection接口,代表与特定的数据库的连接。
方法:
createStatement() 创建一个createStatement对象。

prepareStatement() 创建预处理对象prepareStatement。

isReadOnly() 查看当前Connection对象的读取模式是否是只读形式。

setReadOnly()

roolBack() 取消当前事务中进行的所有更改,并释放connection对象的数据库锁。

close() 关闭并释放资源。

四,发送SQL语句

Statement接口用于已经建立连接的基础上向数据库发送sql语句。
上面Connection接口的方法中就有一个 createStatement() 方法,就是用来生成Statement对象的。Connection更像是领导一样,管理着整个数据库的权限等,而Statment就是用来增删改查的

方法:
execute(String sql) 执行给定的sql语句,返回结果有多种可能,如select结果集等。可以执行insert,delete,update等。

executeQuery(String sql) 只能用来查询,返回单个的ResultSet对象。

查看操作结果集

ResultSet接口类似于一个临时表,用来保存数据库查询操作所获得的结果集。可以通过next方法将指向每一行数据的指针向下移动。还可以通过给定的函数来进行更改结果集。

接口方法如下:

在这里插入图片描述

代码演示

连接代码

package 嵌入式学习;

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

public class Conn
{
	static String driverClassString = "oracle.jdbc.driver.OracleDriver";
	static String urlString = "jdbc:oracle:thin:@localhost:1521:xe";
	static String userString = "system";
	static String passwordString = "123456";
	
	public Connection getConnection()
	{
		Connection conn = null;
		
		try 
		{
			Class.forName(driverClassString);
			conn = DriverManager.getConnection(urlString, userString, passwordString);
			System.out.println("连接成功!!!");
		} 
		catch (ClassNotFoundException e) 
		{
			e.printStackTrace();
		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}

		
		return conn;
	}
}

创建表

public void createTable(Connection conn)
	{
		try 
		{
			Statement statement = conn.createStatement();
			
			statement.execute("create table Family(Ffather varchar2(20), Fmather varchar2(20), Fson varchar2(20))");
			System.out.println("表已创建");
		} 
		catch (SQLException e) 
		{
			e.printStackTrace();
		}
	}

删除表

public void deleteTable(Connection conn)
	{
		try 
		{
			Statement statement = conn.createStatement();
			statement.execute("drop table Family");
			System.out.println("表已删除!!");
			conn.commit();
			statement.close();
		} 
		catch (SQLException e) 
		{
			e.printStackTrace();
		}
	}

添加信息

public void insertInfor(Connection conn)
	{
		try 
		{
			Statement statement = conn.createStatement();
			statement.execute("insert into Family values('haha', 'hengheng', 'heihei')");
			statement.execute("insert into Family values('周星驰', '朱茵', '周星星')");
			System.out.println("插入成功!!!");
			conn.commit();
			statement.close();
		} 
		catch (SQLException e) 
		{
			e.printStackTrace();
		}
	}

查询信息

public static void searchInfor(Connection conn)
	{
		ResultSet resultSet = null;
		
		try 
		{
			Statement statement = conn.createStatement();
			resultSet = statement.executeQuery("select * from Family");
			
			while (resultSet.next())
			{
				for (int i=1; i<=3; i++)
				{	
					System.out.print(resultSet.getNString(i) + " ");   //按照列号
				}
				
				System.out.println("");
				System.out.print(resultSet.getNString("Ffather") + " "); //按照列名
				System.out.print(resultSet.getNString("Fmather") + " ");
				System.out.print(resultSet.getNString("Fson") + " ");
				System.out.println("\n");
			}
			
			conn.commit();
			statement.close();
			resultSet.close();
		} 
		catch (SQLException e) 
		{
			e.printStackTrace();
		}
	}

更新某一元组的列值

public void updateInfor(Connection conn)
	{
		try 
		{
			Statement statement = conn.createStatement();
			
			statement.execute("update Family set Fson='houhou' where Fson='heihei'");
			conn.commit();
			statement.close();
		} 
		catch (SQLException e) 
		{
			e.printStackTrace();
		}
	}
  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值