java连接Oracle数据库的方法解析

 更新时间:2016年12月15日 15:18:37   作者:菜鸟麻花  
本文主要对java连接Oracle数据库方法进行步骤解析,具有很好的参考价值,需要的朋友一起来看下吧

Oracle数据库先创建一个表和添加一些数据

1.先在Oracle数据库中创建一个student表:

create table student
(
 id number(11) not null primary key,
 stu_name varchar(16) not null,
 gender number(11) default null,
 age number(11) default null,
 address varchar(128) default null
);

2.向表中增添一些数据

insert into student values('1','王小军','1','17','北京市和平里七区30号楼7门102')

MyEclipse里编写java代码

1.将ojdbc6.jar导入项目中

   先创建一个项目,然后在鼠标移到项目上右键-->new-->folder;folder name:lib;这样就在项目中创建了一个文件夹lib;然后将ojdbc6.jar包导入该文件夹中

   该包下载地址链接:http://wd.jb51.net:81//201612/yuanma/ojdbc6_jb51.rar

   鼠标移到该包上;右键-->build path-->add to build path;

2.创建一个类,开始编码

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
public class OperateOracle {
 // 定义连接所需的字符串
 // 192.168.0.X是本机地址(要改成自己的IP地址),1521端口号,XE是精简版Oracle的默认数据库名
 private static String USERNAMR = "orcl";
 private static String PASSWORD = "orcl";
 private static String DRVIER = "oracle.jdbc.OracleDriver";
 private static String URL = "jdbc:oracle:thin:@192.168.0.X:1521:xe";
 // 创建一个数据库连接
 Connection connection = null;
 // 创建预编译语句对象,一般都是用这个而不用Statement
 PreparedStatement pstm = null;
 // 创建一个结果集对象
 ResultSet rs = null;
 /**
 * 向数据库中增加数据
 * 首先获取表内数据总数,总数+1为新增数据的id值
 * @param stuName:学生姓名
 * @param gender:学生性别,1表示男性,2表示女性
 * @param age:学生年龄
 * @param address:学生住址
 */
 public void AddData(String stuName, int gender, int age, String address) {
 connection = getConnection();
 // String sql =
 // "insert into student values('1','王小军','1','17','北京市和平里七区30号楼7门102')";
 String sql = "select count(*) from student where 1 = 1";
 String sqlStr = "insert into student values(?,?,?,?,?)";
 int count = 0;
 try {
 // 计算数据库student表中数据总数
 pstm = connection.prepareStatement(sql);
 rs = pstm.executeQuery();
 while (rs.next()) {
 count = rs.getInt(1) + 1;
 System.out.println(rs.getInt(1));
 }
 // 执行插入数据操作
 pstm = connection.prepareStatement(sqlStr);
 pstm.setInt(1, count);
 pstm.setString(2, stuName);
 pstm.setInt(3, gender);
 pstm.setInt(4, age);
 pstm.setString(5, address);
 pstm.executeUpdate();
 } catch (SQLException e) {
 e.printStackTrace();
 } finally {
 ReleaseResource();
 }
 }
 /**
 * 向数据库中删除数据
 * @param stuName:根据姓名删除数据
 */
 public void DeleteData(String stuName) {
 connection = getConnection();
 String sqlStr = "delete from student where stu_name=?";
 System.out.println(stuName);
 try {
 // 执行删除数据操作
 pstm = connection.prepareStatement(sqlStr);
 pstm.setString(1, stuName);
 pstm.executeUpdate();
 } catch (SQLException e) {
 e.printStackTrace();
 } finally {
 ReleaseResource();
 }
 }
 /**
 * 向数据库中修改数据
 * @param stuName:学生姓名,根据此值查询要修改的某行值
 * @param gender
 * @param age
 * @param address
 */
 public void UpdateData(String stuName, int gender, int age, String address) {
 connection = getConnection();
 String sql = "select id from student where 1 = 1 and stu_name = ?";
 String sqlStr = "update student set stu_name=?,gender=?,age=?,address=? where id=?";
 int count = 0;
 try {
 // 计算数据库student表中数据总数
 pstm = connection.prepareStatement(sql);
 pstm.setString(1, stuName);
 rs = pstm.executeQuery();
 while (rs.next()) {
 count = rs.getInt(1);
 System.out.println(rs.getInt(1));
 }
 // 执行插入数据操作
 pstm = connection.prepareStatement(sqlStr);
 pstm.setString(1, stuName);
 pstm.setInt(2, gender);
 pstm.setInt(3, age);
 pstm.setString(4, address);
 pstm.setInt(5, count);
 pstm.executeUpdate();
 } catch (SQLException e) {
 e.printStackTrace();
 } finally {
 ReleaseResource();
 }
 }
 /**
 * 向数据库中查询数据
 */
 public void SelectData() {
 connection = getConnection();
 String sql = "select * from student where 1 = 1";
 try {
 pstm = connection.prepareStatement(sql);
 rs = pstm.executeQuery();
 while (rs.next()) {
 String id = rs.getString("id");
 String name = rs.getString("stu_name");
 String gender = rs.getString("gender");
 String age = rs.getString("age");
 String address = rs.getString("address");
 System.out.println(id + "\t" + name + "\t" + gender + "\t"
 + age + "\t" + address);
 }
 } catch (SQLException e) {
 e.printStackTrace();
 } finally {
 ReleaseResource();
 }
 }
 /**
 * 使用ResultSetMetaData计算列数
 */
 public void SelectData2() {
 connection = getConnection();
 String sql = "select * from employees where 1 = 1";
 int count = 0;
 try {
 pstm = connection.prepareStatement(sql);
 rs = pstm.executeQuery();
 while (rs.next()) {
 count++;
 }
 ResultSetMetaData rsmd = rs.getMetaData();
 int cols_len = rsmd.getColumnCount();
 System.out.println("count=" + count + "\tcols_len=" + cols_len);
 } catch (SQLException e) {
 e.printStackTrace();
 } finally {
 ReleaseResource();
 }
 }
 /**
 * 获取Connection对象
 * 
 * @return
 */
 public Connection getConnection() {
 try {
 Class.forName(DRVIER);
 connection = DriverManager.getConnection(URL, USERNAMR, PASSWORD);
 System.out.println("成功连接数据库");
 } catch (ClassNotFoundException e) {
 throw new RuntimeException("class not find !", e);
 } catch (SQLException e) {
 throw new RuntimeException("get connection error!", e);
 }
 return connection;
 }
 /**
 * 释放资源
 */
 public void ReleaseResource() {
 if (rs != null) {
 try {
 rs.close();
 } catch (SQLException e) {
 e.printStackTrace();
 }
 }
 if (pstm != null) {
 try {
 pstm.close();
 } catch (SQLException e) {
 e.printStackTrace();
 }
 }
 if (connection != null) {
 try {
 connection.close();
 } catch (SQLException e) {
 e.printStackTrace();
 }
 }
 }
}

3.创建一个测试类

public class Test {
 public static void main(String[] args) {
 /**
 * 增删改查完成,但是有一定局限性
 * 1.增 问题不大
 * 2.删 要给出一个值去删除(可能值不存在-->没有处理机制,值不唯一怎么处理?)
 * 3.改 同删的问题
 * 4.查 问题不大
 */
 //创建OperateOracle对象
 OperateOracle oo=new OperateOracle();
 //测试增加数据操作
 //oo.AddData("孙中山",1,25,"北京市海淀区红旗路111号");
 //测试删除数据操作
 //oo.DeleteData("孙中山");
 //测试更新数据操作
 oo.UpdateData("孙中山",1,30,"北京市东城区岳山路11号");
 //测试查询数据操作
 //oo.SelectData();
 //测试ResultSetMetaData类
 //oo.SelectData2();
 }
}

正如测试类中所注释的,此处只可按照正确的方式去连接Oracle数据库,操作增删改查操作,但是对于一些错误操作的处理机制还不够完善。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!

相关文章

  • java使用DelayQueue实现延时任务

    java使用DelayQueue实现延时任务

    项目中经常会用到类似一些需要延迟执行的功能,比如缓存,java提供了DelayQueue来很轻松的实现这种功能,下面小编就来和大家介绍一下如何使用DelayQueue实现延时任务吧
    2023-10-10
  • 详解Java内部类与对象的打印概念和流程

    详解Java内部类与对象的打印概念和流程

    在 Java 中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类
    2021-10-10
  • 浅谈Spring 重定向指南

    浅谈Spring 重定向指南

    本篇文章主要介绍了浅谈Spring 重定向指南,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • Spring Boot 整合持久层之Spring Data JPA

    Spring Boot 整合持久层之Spring Data JPA

    在介绍Spring Data JPA的时候,我们首先认识下Hibernate。Hibernate是数据访问解决技术的绝对霸主,使用O/R映射技术实现数据访问,O/R映射即将领域模型类和数据库的表进行映射,通过程序操作对象而实现表数据操作的能力,让数据访问操作无须关注数据库相关的技术
    2022-08-08
  • SpringDataElasticsearch与SpEL表达式实现ES动态索引

    SpringDataElasticsearch与SpEL表达式实现ES动态索引

    这篇文章主要介绍了SpringDataElasticsearch与SpEL表达式实现ES动态索引,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-09-09
  • Java图形化编程之JFrame疫苗接种系统详解

    Java图形化编程之JFrame疫苗接种系统详解

    GUI图形界面设计是用户和程序交互的工具,用户通过图形界面控制程序事件的发生。首先介绍Swing的基本体系结构,这是底层
    2021-09-09
  • 解决SSLContext.getInstance()中参数设置TLS版本无效的问题

    解决SSLContext.getInstance()中参数设置TLS版本无效的问题

    这篇文章主要介绍了解决SSLContext.getInstance()中参数设置TLS版本无效的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 浅谈Java中强制类型转换的问题

    浅谈Java中强制类型转换的问题

    下面小编就为大家带来一篇浅谈Java中强制类型转换的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • Java超详细讲解WebMvcConfigurer拦截器

    Java超详细讲解WebMvcConfigurer拦截器

    这篇文章将用实例来和大家介绍一下WebMvcConfigurer拦截器。文中的示例代码讲解详细,对我们学习Java有一定的帮助,需要的可以参考一下
    2022-06-06
  • 一文带你掌握SpringBoot中常见定时任务的实现

    一文带你掌握SpringBoot中常见定时任务的实现

    这篇文章主要为大家详细介绍了Spring Boot中定时任务的基本用法、高级特性以及最佳实践,帮助开发人员更好地理解和应用定时任务,提高系统的稳定性和可靠性,需要的可以参考下
    2024-03-03

最新评论