javaweb(jsp)项目如何连接oracle数据库???(自整理)

第一步:创建oracle数据库

创建连接:

创建表/视图:

第二步:在WEB-INF/lib中导入jar包:

分别是:

  • ojdbc8-19.3.0.0.jar
    • 这是一个连接oracle的jar,不加就无法连接oracle
  • orai18n-21.8.0.0.jar(不加会出现一个字符集的报错,如下:)
    • Exception in thread "main" java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK

第三步:编写jdbc

代码如下:

package com.clk.utils;

import java.sql.*;

/**
 * @author CLK
 * @PackageName:com.clk.utils
 * @ClassName:BaseDao
 * @Description:
 * @date 2023/12/7 13:17
 */
public class BaseDao {
  //使用SID连接oracle数据库
  //如何查询SID??
    //select value from v$parameter where name='instance_name';
  private final static String URL = "jdbc:oracle:thin:@localhost:1521:orcl";
  //驱动
  private final static String DRIVER = "oracle.jdbc.driver.OracleDriver";
  //用户名,必须使用sysdba,否则访问权限不够
  private final static String USER = "sys as sysdba";
  //连接oracle密码
  private final static String PASSWORD = "123456";

  static {
    try {
      Class.forName(DRIVER);
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    }
  }
  //创建连接
  protected static Connection getCon() throws SQLException {
    Connection connection = DriverManager.getConnection(URL, USER, PASSWORD);
    return connection;
  }
  //关闭驱动
  protected void close(Connection conn, Statement st, ResultSet rs) {
    try {
      if (conn != null) {
        conn.close();
      }
      if (st != null) {
        st.close();
      }
      if (rs != null) {
        rs.close();
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }
  }

  public static void main(String[] args) throws SQLException {
    BaseDao baseDao = new BaseDao();
    System.out.println(getCon());
    Statement statement = getCon().createStatement();
    //这里必须用SYSTEM.HIS_USER,不能直接用表名,否则会出现“表或视图不存在的问题”
    ResultSet resultSet = statement.executeQuery("select * from SYSTEM.HIS_USER");
    while (resultSet.next()){
      System.out.println(resultSet.getString("username"));
    }
    baseDao.close(getCon(),statement,resultSet);
  }
}

扩展:关于JDBC连接ORACLE的三种格式方法:(参考文章:【Oracle连接】java.sql.SQLException: Listener refused the connection with the following error: ORA-12505

格式一: Oracle JDBC Thin using an SID
标准:jdbc:oracle:thin:@<host>:<port>:<SID>

举例:jdbc:oracle:thin:@localhost:1521:orcl

查询数据库的SID的方法语句:
--查SID
select value from v$parameter where name='instance_name';

格式二: Oracle JDBC Thin using a ServiceName
标准:jdbc:oracle:thin:@//<host>:<port>/<service_name>

举例:jdbc:oracle:thin:@//localhost:1521/orcl.huizxxxx.com 

查询数据库的ServiceName的方法语句:
--查ServiceName

select value from v$parameter where name='service_names';

格式三:Oracle JDBC Thin using a TNSName
标准:jdbc:oracle:thin:@<TNSName>

举例:jdbc:oracle:thin:@TNS_ALIAS_NAME

配置如下:jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=or12c2)))

注意:!!!

在使用SQL语句对表/视图进行操作是,需在前面加用户如SYS/SYSDBA/SYSTEM再.表/视图名。

如果直接使用表名/视图名进行操作,则无法“表/视图不存在的问题”。(nested exception is java.sql.SQLSyntaxErrorException: ORA-00942: 表或视图不存在)

【这也是与连接mysql数据库不一样的地方之一】

错误形式:×

select * from HIS_USER

正确形式: √

select * from SYSTEM.HIS_USER

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值