Oracle——7.连接数据库

目录

导入ojdbc的jar包

创建连接

1.加载驱动

 2.创建连接

创建连接总览

增删改查操作

3.创建一个可执行sql的对象

4.执行sql语句

整理成方法文件

1.创建一个属性

2.创建数据库的连接方法

3.创建增删改的方法

4.创建查询的方法

改进

全代码

DataBase.java

测试文件Test.java


导入ojdbc的jar包

1.将jar包复制到eclipse的src下

2.右键jar包——Build Path——Add to Build Path


创建连接

新建JDBCTest.java文件

1.加载驱动

// 数据库连接的方法
public void getConn() throws Exception{
    // 1.加载驱动 包名+类名的形式(可以直接复制路径)
    Class.forName("oracle.jdbc.driver.OracleDriver");
}

复制方法:

  • src包下的Referenced Libraries
  • ojdbc5.jar——oracle——jdbc——driver——OracleDriver.class——OracledDriver
  • 右键Copy Qualified Name

 2.创建连接

// 2.创建连接
// 通过驱动,来创建一个连接
// 创建这个连接,需要三个参数
// 第一个url:数据库的地址和jdbc所连接的数据库类型和数据库的名字
// 第二个user:数据库的用户名
// 第三个password:数据库的密码
// DriverManager.getConnection(url,user,password)
DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","123456");

URL信息:

  • jdbc:oracle:thin:数据库连接方式。thin方式是纯java驱动连接方式
  • localhost:服务器地址。可以是IP地址、机器名、localhost(本机)
  • 1521:服务器端口(Oracle默认端口:1521)
  • orcl:Oracle数据库实例,就是登陆plsqldev时,第三行的Database

现在我们可以创建一个main方法测试一下连接成不成功

public static void main(String[] args) throws Exception{
    JDBCTest jdbc = new JDBCTest();
    // 调用
    jdbc.getConn();
}

执行如果控制台没有什么反应,没提示错误,很大几率是写对了!

也可以在JDBCTest.java的创建连接语句下面加上输出语句来测试对不对


创建连接总览

public class JDBCTest{
    public void getConn() throws Exception{
        Class.forName("oracle.jdbc.driver.OracleDriver");
        DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","123456");
    }
}
public static void main(String[] args) throws Exception{
    JDBCTest jdbc = new JDBCTest();
    jdbc.getConn();
}

可以把加载驱动和连接的代码粘下来存起来,下次写的时候可以直接用~


增删改查操作

对上面创建连接的语句进行修改

// 这一步需要进行导包 java.sql.Connection
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","123456");

3.创建一个可执行sql的对象

// 3.通过连接 创建一个可执行sql的对象
Statement stmt = conn.createStatement();

4.执行sql语句

增删改

增删改都可以用executeUpdate方法

// 4.通过 可执行语句的对象,执行sql语句
// 增删改都可以用这个语句
// 执行之后,会返回一个数字,这个数字表示 执行了几条数据
stmt.executeUpdate("insert into dept values(55,'花钱部','北京')");

执行之后,会返回一个数字,这个数字表示 执行了几条数据

所以,我们可以来小改一下来判断它有没有成功

int number = stmt.executeUpdate("insert into dept values(55,'花钱部','北京')");
// 验证成功失败
if(num>0){
    System.out.println("添加成功");
}else{
    System.out.println("添加失败");
}

查询

executeQuery方法用来写查询语句,会返回一个结果集

// 查询
// 是通过executeQuery方法来进行查询的
// 并且返回一个ResultSet(结果集)类型的数据
ResultSet rs = stmt.executeQuery("select * from dept");

获取结果集中的信息

// 可以通过循环,来获取结果集中的信息
while(rs.next()){
    // 如果有内容
    // rs结果集中的一行数据
    // getInt 表示获取的是一个int类型的数据
    // 括号中是列的名字
    int deptno = rs.getInt("deptno");
    String dname = rs.getString("dname");
    String loc = rs.getString("loc");
    System.out.println(deptno + "----" + dname + "----" + loc);
}

这里有个问题,如果列的名字记不住或懒得写怎么办??—— 还可以通过列来获取信息

while(rs.next()){
    int deptno = rs.getInt(1);
    String dname = rs.getString(2);
    String loc = rs.getString(3);
    System.out.println(deptno + "----" + dname + "----" + loc);
}

整理成方法文件

新建一个DataBase.java文件

1.创建一个属性

Connection conn; // 创建属性

2.创建数据库的连接方法

// 数据库的连接
public void getConn(){
    Class.forName("oracle.jdbc.driver.OracleDriver");
    conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","123456");
    System.out.println("连接成功");
}

出现异常的修改方法

  • 可以按照上面之前写过的方法一样抛出异常
  • 也可以用try-catch
public void getConn(){
    try{
        Class.forName("oracle.jdbc.driver.OracleDriver");
        conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","123456");
        System.out.println("连接成功");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

3.创建增删改的方法

// 增删改的一个共通
public int DoExe(String sql){
    // 1.调用数据库连接的方法
    getConn();
    try{
        // 2.创建可执行对象
        Statement stmt = conn.createStatement();
        // 执行sql语句
        return stmt.executeUpdate(sql);
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return 0;
}

可以在main方法里进行测试

public static void main(String[] args) throws Exception {
    // 想删除 部门表中的56
    String sql = "delete from dept where deptno=56";
    DataBase db = new DataBase();

    int num = db.DoExe(sql);
    if(num>0) {
        System.out.println("处理成功");
    }else{
        System.out.println("处理失败");
    }
}

改进一下!

public static void main(String[] args) throws Exception {
    Scanner input = new Scanner(System.in);
    System.out.println("请输入要删除的部门编号:");
    int deptno = input.nextInt();

    String sql = "delete from dept where deptno=" + deptno;
    DataBase db = new DataBase();

    int num = db.DoExe(sql);
    if(num>0) {
        System.out.println("处理成功");
    }else{
        System.out.println("处理失败");
    }
}

4.创建查询的方法

返回的是ResultSet结果集

public ResultSet Query(String sql){
    // 1.调用数据库连接的方法
    getConn();
    
    try {
        // 2.创建可执行的对象
        Statement stmt = conn.createStatement();
        // 执行
        return stmt.executeQuery(sql);
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return null;
}

调用方法

String sql1 = "select * from dept";
// 执行
ResultSet rs = db.Query(sql1);
while(rs.next()){
    System.out.println(rs.getInt(1) + "----" + rs.getString(2) + "----" + rs.getString(3));
}

改进

我们在写类似插入语句的时候会用到单引号,打出来太麻烦了怎么办?

String sql = "insert into dept values (" + deptno + ",'" + dname + "'," + "'" + loc + "')";

把信息改成“?”

? 表示占位符

String sql = "insert into dept values (?,?,?)";

方法改成下面这样

Object... obj 表示可变参数,这个方法的参数 可以是1个,可以是2个,也可以是3个,或多个

public int DoExe(String sql,Object... obj){
    getConn();
    try {
        // 预处理 解决"?"
		// 先获取sql语句
		PreparedStatement pstmt = conn.prepareStatement(sql);
			
		// 为了循环括号里面的参数,替换"?"
		for(int i = 0;i < obj.length;i++) {
			pstmt.setObject(i+1, obj[i]);
		}
		// 执行,后面的括号不需要参数
		return pstmt.executeUpdate();
			
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return 0;
}

全代码

DataBase.java

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

public class DataBase {
	Connection conn; // 属性
	
	// 数据库的连接
	public void getConn() throws Exception {
		// 1.加载驱动 包名+类名的形式
				Class.forName("oracle.jdbc.driver.OracleDriver");
				
				// 2.创建连接
				// 通过驱动来创建一个连接
				// 创建这个连接,需要三个参数
				// 第一个url:数据库的地址和jdbc所连接的数据库类型和数据库的名字
				// 第二个user:数据库的用户名
				// 第三个password:数据库的密码
				conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "123456");
				
	}
	
	/*
	// 增删改的一个共通
	public int DoExe(String sql) throws Exception {
		// 1.调用数据库连接的方法
		getConn();
		
		// 2.创建可执行对象
		try {
			Statement stmt = conn.createStatement();
			// 执行sql语句
			return stmt.executeUpdate(sql);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return 0;
	}*/
	
	// 增删改的一个共通
	// Object... obj 表示可变参数,这个方法的参数可以是1个,可以是2个,也可以是三个,或多个
	public int DoExe(String sql,Object... obj) throws Exception {
		// 1.调用数据库连接的方法
		getConn();
		
		try {
			// 预处理 解决"?"
			// 先获取sql语句
			PreparedStatement pstmt = conn.prepareStatement(sql);
			
			// 为了循环括号里面的参数,替换"?"
			// "?"是没有下标概念的,所以从1开始;但数组从0开始
			for(int i = 0;i < obj.length;i++) {
				pstmt.setObject(i+1, obj[i]);
			}
			// 执行,后面的括号不需要参数
			return pstmt.executeUpdate();
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return 0;
		}
	
	public ResultSet Query(String sql,Object... obj) throws Exception{
		getConn();
		try {
		/*
			Statement stmt = conn.createStatement();
			return stmt.executeQuery(sql);
		*/
			// 预处理
			PreparedStatement pstmt = conn.prepareStatement(sql);
			// 把占位符,用实际的值给替换掉
			for(int i = 0;i < obj.length;i++){
				pstmt.setObject(i+1, obj[i]);
			}
			// 执行并返回
			return pstmt.executeQuery();
		
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

}

测试文件Test.java

import java.sql.ResultSet;
import java.util.Scanner;

public class Test {
	public static void main(String[] args) throws Exception {
		DataBase db = new DataBase();
		Scanner input = new Scanner(System.in);
		
		while(true) {
			System.out.println("1.增加");
			System.out.println("2.删除");
			System.out.println("3.修改");
			System.out.println("4.查找");
			System.out.println("5.退出");
			System.out.print("输入功能:");
			int no = input.nextInt();
			if(no == 5){
				System.out.println("退出成功");
				break;
			}
			switch(no){
				case 1:
					System.out.print("请输入部门号:");
					int deptno = input.nextInt();
					System.out.print("请输入部门名称:");
					String dname = input.next();
					System.out.print("请输入地点:");
					String loc = input.next();
					// "?"表示占位符
					String sql = "insert into dept values (?,?,?)";
					int num = db.DoExe(sql,deptno,dname,loc);
					if(num>0) {
						System.out.println("添加成功");
					}else{
						System.out.println("添加失败");
					}
					break;
				case 2:
					System.out.print("请输入要删除的部门编号:");
					int deptno1 = input.nextInt();
					String sql1 = "delete from dept where deptno=" + deptno1;
					int num1 = db.DoExe(sql1);
					if(num1>0) {
						System.out.println("删除成功");
					}else{
						System.out.println("删除失败");
					}
					break;
				case 3:
					System.out.print("请输入修改的部门编号:");
					int deptno2 = input.nextInt();
					System.out.print("输入修改的列名:");
					String col = input.next();
					System.out.print("输入修改后的信息:");
					String recol = input.next();
					
					String sql2 = "update dept set " + col + "='" + recol + "' where deptno=" + deptno2;
					int num2 = db.DoExe(sql2);
					if(num2>0) {
						System.out.println("修改成功");
					}else{
						System.out.println("修改失败");
					}
					break;
				case 4:
					/*
					String sql3 = "select * from dept";
					ResultSet qu = db.Query(sql3);
					while(qu.next()) {
						System.out.println(qu.getInt(1) + "----" + qu.getString(2) + "----" + qu.getString(3));
					}*/
					
					// 输入部门编号或者部门名称,查找有没有
					System.out.print("输入部门编号");
					int deptno4 = input.nextInt();
					System.out.print("输入部门名称");
					String dname4 = input.next();
					String sql4 = "select * from dept where deptno=? and dname=?";
					ResultSet qu1 = db.Query(sql4,deptno4,dname4);
					if(!qu1.next()){
						System.out.println("没有该用户");
					}else{
						System.out.println("有该用户");
						System.out.println(qu1.getInt(1) + "----" + qu1.getString(2) + "----" + qu1.getString(3));
					}
					
					break;
			}
			
		}
	}
}

jar包链接 提取码:n3oc

链接:https://pan.baidu.com/s/1xTPh75P5EWyUli30FWJuiA 
提取码:n3oc 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值