Java连接Oracle数据库(详细!快速上手)

Java连接Oracle数据库及封装JDBC

如果你点开看到了这篇文章,说明你已经或多或少地通过学校学习亦或是自学了解了 oracle 数据库的基本用法。但是实际在开发程序的时候,我们是不可能手动地去操作sql语句的,而是由程序去调用。这个时候,就需要使用上编程语言了。本文主要介绍的是Java连接数据库的技术 —— JDBC。

一、JDBC???

JDBC的全称是Java Data Base Connectivity, Java与各大数据库相连接都是使用这门技术。各种数据库的API各不相同,Java是如何实现统一的呢?这是因为sun公司制定了一套标准,各大数据库厂商依据这个标准开发出数据库驱动程序。我们只需要使用这些驱动即可操作数据库。

在oracle安装目录之下可以找到这些驱动程序
在这里插入图片描述
那么多个驱动程序,该选择哪个?

Oracle版本jdk版本推荐jar包备注
Oracle 8iJDK 1.1.xclasses111.zip
Oracle 8iJDK 1.1.xclasses12.zip
Oracle 9iJDK 1.1.xclasses111.jar或者 classes111.zip
Oracle 9iJDK 1.2 and JDK 1.3classes12.jar 或者 classes12.zip
Oracle 9iJDK 1.4ojdbc14.jar
Oracle 9iJDK 1.5ojdbc5.jar
Oracle 9iJDK 1.6ojdbc6.jar
Oracle 10gJDK 1.2 and JDK 1.3.classes12.jar
Oracle 10gJDK 1.4 and 5.0ojdbc14.jar
Oracle 11gjdk5ojdbc5.jar
Oracle 11gjdk6ojdbc6.jar

按照oracle版本和jdk版本选择,这里的表格仅作参考。

二、连接!!!

说的太多也没用,直接上一段程序体验一下。只需要准备一个IDE(eclipse、IDEA等)和上面所说的驱动程序即可。

创建项目

首先,创建一个普通的Java项目,引入jar包。(我这里是放在了jbdc_oracle目录下)最后把鼠标移到ojdbc.jar,右键,bulild path,add to build path

在这里插入图片描述

IDEA创建的项目同理(Add to libary),会使用Maven的也可以创建Maven项目,在pom文件引入依赖即可。

编写代码

import java.sql.*;

public class Main {

    public static void main(String[] args) {
        try {
            // 1.加载驱动
            Class.forName("oracle.jdbc.driver.OracleDriver");
            // 2.获取连接
            Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@//127.0.0.1:1521/orcl","scott","tiger");
            System.out.println(connection.getMetaData());
            // 3.创建Statement对象(可以执行sql的对象)
            PreparedStatement preparedStatement = connection.prepareStatement("select * from dept");
            // 4.获取结果集
            ResultSet resultSet = preparedStatement.executeQuery();
            // 5.对数据进行处理
            while(resultSet.next()) {
                Integer id = resultSet.getInt("DEPTNO");
                String dname = resultSet.getString("DNAME");
                String location = resultSet.getString("LOC");
                System.out.println(id+" "+dname+" "+location);
            }
            // 6.关闭连接 先调用的最后关闭 关闭前判断是否存在
           if(resultSet != null) {
                resultSet.close();
            }
            if(preparedStatement != null) {
                preparedStatement.close();
            }
            if(connection != null) {
                connection.close();
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
}

接下来对以上代码进行一一说明

  • 加载驱动,这里是固定写法,包名不要写错

     Class.forName("oracle.jdbc.driver.OracleDriver");
    

    其实写法不止这一种,只是比较推荐这种。感兴趣的可以看看官方的写法:

    官方JDBC的连接

  • 获取连接

     Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@//127.0.0.1:1521/orcl","scott","tiger");
    

    getConnection()里面的三个参数分别是url地址,用户名和密码

    jdbc:oracle:thin:固定写法,其中thin表示连接数据库的一种方式,想进一步了解的话,文末有参考地址

    127.0.0.1:ip地址,这里表示本机

    1521:oracle的端口地址,一般安装后默认为1521

    orcl:数据库的实例名称,一般安装后默认有一个orcl

在这里插入图片描述

JDBC常见的对象

注:以下方法都省略了函数的参数

Connection

意如其名,就是表示数据库和Java之间的一个连接,所有的数据库操作都与其密切相关。

prepareStatement();//PreparedStatement对象
createStatement();//Statement对象
commit();        //提交
rollback();      //回滚
prepareCall();   //存储过程
Statement
executeQuery(); //查询,返回ResultSet
executeUpdate(); //增加、删除、更新,返回受影响的行数
();//增删改查都可以进行,不建议使用。运行结果为ResultSet则返回true,否则返回false
PreparedStatement

PreparedStatement是Statement的子类,PreparedStatement对象可以对sql语句进行预编译,并且可以通过占位符的方式方便我们进行参数的拼接:

PreparedStatement preparedStatement = connection.prepareStatement("select * from dept where deptno=?");
preparedStatement.setInt(1,10); //int对应deptno的类型,1代表第1个问号,
ResultSet

查询后获得的结果集

getXXX(数据库的列名/第几列)  //其中XXX可以是Int,Array,Boolean等
 /*
 第几列对应的是sql中的第几列,
 如select deptno,loc,dname from dept;
 写法:getInt(1) / getInt("deptno")
 select loc,dname,deptno from dept;
 写法:getInt(3) / getInt("deptno");

这几个对象多调用几次就知道如何使用了,总的使用流程是

连接数据库(获取Connection对象) -> 创建Statement对象(Statement/PreparedStatement) -> 用Statement对象执行语句(execute/executeUpdate/executeQuery) -> 利用返回值(execute返回true/false,executeUpdate返回受影响行数,executeQuery返回ResultSet)判断执行的结果 -> 关闭对象

多多使用就对了!

三、增删改查示例

示例的项目结构做出来是这样的:utils包里的DBUtil用于获取数据库连接,pojo包里的Student用于封装数据,dao包里的StudentDao封装了学生的增删改查的方法,最终在Main里面完成测试。
在这里插入图片描述
示例使用到的表:

CREATE TABLE "STUDENT" 
 (	"SNO" VARCHAR2(17 BYTE), 
	"SNAME" VARCHAR2(10 BYTE), 
	"SAGE" NUMBER(*,0), 
	"SSEX" CHAR(2 BYTE), 
	"SDEPT" VARCHAR2(20 BYTE), 
	"SENROLLMENT" DATE
 ) SEGMENT CREATION IMMEDIATE 
Insert into STUDENT (SNO,SNAME,SAGE,SSEX,SDEPT,SENROLLMENT) values ('1806100001','李四',20,'男',null,null);
Insert into STUDENT (SNO,SNAME,SAGE,SSEX,SDEPT,SENROLLMENT) values ('1806100002','王五',21,'男',null,null);
Insert into STUDENT (SNO,SNAME,SAGE,SSEX,SDEPT,SENROLLMENT) values ('1806100003','赵柳儿',21,'女',null,null);

针对学生表写学生类:

public class Student {

    private String id;

    private String name;

    private Integer age;

    private String sex;

    public Student(){}

    public Student(String id, String name, Integer age, String sex) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }
}


对Connection类的获取作了简单的封装:

public class DBUtil {

    private static final String URL  ="jdbc:oracle:thin:@127.0.0.1:1521:orcl" ;
    private static final String USERNAME  ="cc" ;
    private static final String PASSWORD  ="ccpassword" ;

    /**
     * 关闭连接
     * @param rs
     * @param stmt
     * @param connection
     */
    public static void closeAll(ResultSet rs,Statement stmt,Connection connection) {
        try {
            if(rs!=null) {
                rs.close();
            }
            if(stmt!=null) {
                stmt.close();
            }
            if(connection!=null) {
                connection.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取连接
     * @return
     * @throws ClassNotFoundException
     * @throws SQLException
     */
    public static Connection getConnection() throws ClassNotFoundException, SQLException {
        Class.forName("oracle.jdbc.OracleDriver") ;
        return  DriverManager.getConnection( URL,USERNAME,PASSWORD ) ;
    }

}

增删改查的示例:

public class StudentDao {

    /**
     * 插入学生
     * @param student
     * @return
     * @throws SQLException
     * @throws ClassNotFoundException
     */
    public Integer insert(Student student) throws SQLException, ClassNotFoundException {
        Connection connection = DBUtil.getConnection();
        PreparedStatement preparedStatement = connection.prepareStatement("insert into student(sno,sname,sage,ssex) values(?,?,?,?)");
        preparedStatement.setString(1,student.getId());
        preparedStatement.setString(2,student.getName());
        preparedStatement.setInt(3,student.getAge());
        preparedStatement.setString(4,student.getSex());
        Integer count = preparedStatement.executeUpdate();
        if(count == 1) {
            System.out.println("插入成功!");
        } else {
            System.out.println("插入失败");
        }
        DBUtil.closeAll(null,preparedStatement,connection);
        return count;
    }

    /**
     * 根据id删除
     * @param id
     * @return
     * @throws Exception
     */
    public Integer delete(String id) throws Exception{
        Connection connection = DBUtil.getConnection();
        PreparedStatement preparedStatement = connection.prepareStatement("delete from student where sno = ?");
        preparedStatement.setString(1,id);
        Integer count = preparedStatement.executeUpdate();
        if(count == 1) {
            System.out.println("删除成功!");
        } else {
            System.out.println("删除失败");
        }
        DBUtil.closeAll(null,preparedStatement,connection);
        return count;
    }

    /**
     * 根据id更新名字
     * @param name
     * @param id
     * @return
     * @throws Exception
     */
    public Integer updateName(String name,String id) throws Exception {
        Connection connection = DBUtil.getConnection();
        PreparedStatement preparedStatement = connection.prepareStatement("update student set sname = ? where sno = ?");
        preparedStatement.setString(1,name);
        preparedStatement.setString(2,id);
        Integer count = preparedStatement.executeUpdate();
        if(count == 1) {
            System.out.println("更新成功!");
        } else {
            System.out.println("更新失败");
        }
        DBUtil.closeAll(null,preparedStatement,connection);
        return count;
    }

    /**
     * 查询所有数据
     * @return
     * @throws Exception
     */
    public List<Student> selectAll() throws Exception{
        Connection connection = DBUtil.getConnection();
        PreparedStatement preparedStatement = connection.prepareStatement("select sno,sname,sage,ssex from student");
        ResultSet rs = preparedStatement.executeQuery();
        List<Student> list = new ArrayList<>();
        while (rs.next()) {
            // 封装成对象,放入数组中
            String sno = rs.getString("sno");
            String sname = rs.getString(2);
            Integer sage = rs.getInt(3);
            String ssex = rs.getString("ssex");
            Student student = new Student(sno,sname,sage,ssex);
            list.add(student);
        }
        DBUtil.closeAll(rs,preparedStatement,connection);
        return list;
    }

    /**
     * 根据id查询
     * @param id
     * @return
     * @throws Exception
     */
    public Student select(String id) throws Exception{
        Connection connection = DBUtil.getConnection();
        PreparedStatement preparedStatement = connection.prepareStatement("select sno,sname,sage,ssex from student where sno = ?");
        preparedStatement.setString(1,id);
        ResultSet rs = preparedStatement.executeQuery();
        if (rs.next()) {
            // 封装成对象
            String sno = rs.getString("sno");
            String sname = rs.getString(2);
            Integer sage = rs.getInt(3);
            String ssex = rs.getString("ssex");
            DBUtil.closeAll(rs,preparedStatement,connection);
            Student student = new Student(sno,sname,sage,ssex);
            return student;
        }
        DBUtil.closeAll(rs,preparedStatement,connection);
        return null;
    }

}

测试:

public class Main {

    public static void main(String[] args) throws Exception {
        StudentDao studentDao = new StudentDao();

        Student student = new Student();
        student.setId("188888888");
        student.setName("TestInsert");
        student.setAge(20);
        student.setSex("男");

        // 测试插入数据
        studentDao.insert(student);

        // 测试更新数据
        studentDao.updateName("testInsert","188888888");

        // 测试查询数据
        System.out.println(studentDao.select("188888888"));
        System.out.println(studentDao.selectAll());

        // 测试删除数据
        studentDao.delete("188888888");

    }
}


测试结果:

参考资料:

oracle jdbc选择

JDBC连接数据库三种url方式

  • 15
    点赞
  • 139
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: MySQL是一种流行的关系型数据库管理系统,它是由瑞典MySQL AB公司开发的,现在被Oracle公司拥有和维护。MySQL被广泛用于Web应用程序的数据存储和管理,也被用于处理大型数据集和高并发负载。MySQL支持多种操作系统,包括Windows、Linux、Unix等。 MySQL的主要优点包括: 1. 可靠性:MySQL被广泛使用,它已经被证明是一个非常可靠和稳定的数据库管理系统。 2. 可扩展性:MySQL可以轻松地扩展到支持更多的用户和更大的数据集。 3. 性能:MySQL是一个快速数据库管理系统,它可以处理高并发负载,并且可以在短时间内处理大量数据。 4. 开源:MySQL是一个开源的数据库管理系统,这意味着用户可以自由地使用、修改和分发MySQL。 5. 易于使用:MySQL提供了一个易于使用的命令行界面和基于Web的管理工具,可以帮助用户轻松地管理和维护他们的数据库。 总的来说,MySQL是一种功能强大、可靠、可扩展和易于使用的数据库管理系统,它被广泛应用于各种Web应用程序和大型数据集的处理。 ### 回答2: MySql数据库是一种功能强大、灵活性高的关系型数据库管理系统。它是由瑞典MySQL AB公司开发的,后来被Oracle公司收购。 MySQL数据库具有以下特点: 1. 开源性:MySQL是一种免费的开源数据库系统,吸引了大量的开发者进行研究和改进。开放的开发模式使MySQL的性能、安全性和稳定性得到了不断的提升。 2. 简单易用:MySQL使用的是结构化查询语言(SQL),这种语言的语法规则简单易懂,使得开发人员可以快速上手。同时,MySQL还提供了图形界面工具,使得数据库的管理和维护更加简单方便。 3. 跨平台性:MySQL可以在多种操作系统上运行,包括Windows、Linux、Unix等。这意味着开发人员可以在不同的平台上运行相同的数据库并保持数据一致性。 4. 高性能:MySQL具有优秀的性能表现,可以处理大量的并发请求。它支持内存表和索引,这使得数据库查询的速度更快。此外,MySQL还支持数据的压缩和分区功能,有助于提高查询和存储效率。 5. 可扩展性:MySQL可以轻松地扩展以适应不断增长的数据需求。它支持主从复制和集群部署,可以将负载分布到多个服务器上,提高数据库的处理能力和可用性。 6. 安全性:MySQL提供了多种安全机制,包括数据加密、用户权限管理、防止SQL注入等功能。这些功能有助于保护数据库中的数据不被非法访问或篡改。 MySQL数据库在Web应用开发中被广泛使用,它为开发人员提供了一个可靠、高效的数据存储和管理解决方案。从个人网站到大型企业应用都可以选择MySQL作为数据库的首选。 ### 回答3: MySQL数据库是一个开源的关系型数据库管理系统,广泛应用于互联网应用和Web开发领域。MySQL支持跨平台,可以安装在多种操作系统上,并提供了多种编程语言的API接口,如C、C++、Java和Python等。它具有良好的性能、稳定性和安全性,被许多大型网站、企业和组织所采用。 MySQL提供了多种存储引擎,可以根据实际需要灵活选择,其中最常用的引擎是InnoDB。InnoDB引擎支持事务处理和ACID特性,保证数据的一致性和可靠性。此外,MySQL还支持主从复制和集群部署,实现数据的高可用性和负载均衡。 MySQL具有简单易用的特点,用户可以通过命令行工具或图形化界面管理数据库。它提供了丰富的SQL语法和查询优化功能,可以快速高效地处理大量的数据。此外,MySQL还支持存储过程、触发器和事件等高级功能,方便用户进行复杂的数据处理和业务逻辑操作。 MySQL数据库还提供了可靠的安全机制,包括用户权限管理、加密数据传输和数据备份等功能,保护数据库的安全性和完整性。同时,MySQL还支持扩展性,可以通过添加更多的服务器节点来扩展数据库的处理能力,满足不断增长的数据存储需求。 总之,MySQL数据库是一款功能强大、性能优越、易用且灵活的关系型数据库管理系统,广泛应用于各个领域,是开发者首选的数据库之一。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值