第一步:创建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