Java在Intellij IDEA下连接Oracle数据库总结

本文总结了JDBC的基本步骤。

环境

  • win10
  • Oracle 10g
  • Idea 2016.1
  • ojdbc14.jar // oracle安装目录下即有,在下的是D:\oracle\product\10.2.0\db_1\BIN\jdbc\lib
  • jdk 1.8

JDBC

添加依赖包ojdbc14.jar

添加依赖包的方式也挺多的,我尝试了三种方式,不过首先要将jar包复制到项目中来,可以建一个lib文件夹进行管理。

三种方式:
方式一:

  • 在菜单File中打开Project Structure(或者Ctrl+Alt+Shift+S 又或者图标快捷入口)
  • 左边菜单栏Project Settings中选择Libraries
  • 点中间栏的加号选中Java选项添加lib下的jar包

方式二

  • 在菜单File中打开Project Structure
  • 左边菜单栏Project Settings中选择Modules,右边选择Dependencies
  • 点加号添加JARs and directories…(如果此时点击libraries…则可以添加方式1.1添加进来的libraries下的jar包),选择需要lib下的jar包

方式三

  • 直接在项目中lib下的jar包右键,然后选中add as library,根据所需作用域选择

步骤

  • 获取注册驱动
  • 获取连接
  • 获取执行sql对象
  • 执行sql业务
  • 处理结果集
  • 关闭资源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
import oracle.jdbc.driver.OracleDriver;

import java.sql.*;
import java.util.Properties;

/**
* Created by LuoWenqing on 2017/5/14.
*/
public class DBUtil {
public static Connection conn = null;
public static ResultSet rs = null;
public static PreparedStatement ps = null;

// 数据库连接方式一:使用类加载
public static Connection getConn1() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");// 1.加载Oracle驱动程序
// Oracle URL,localhost即127.0.0.1是本机地址, Mysql URL为jdbc:mysql://localhost:3306/数据库名称
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String user = "u_40118_ec";
String password = "p_40118_ec";
// 传入三个参数:数据库URL, 用户名,用户密码
conn = DriverManager.getConnection(url, user, password); // 2.获取连接
System.out.println("成功连接上数据库");
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}

// 数据库连接方式二:利用Driver对象
public static Connection getConn2() {
Driver driver = new OracleDriver();
try {
DriverManager.deregisterDriver(driver);
Properties pro = new Properties();
pro.put("user", "u_40118_ec");
pro.put("password", "p_40118_ec");
conn = driver.connect("jdbc:oracle:thin:@localhost:1521:orcl", pro);
System.out.println("成功连接数据库");
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}

//查
public static ResultSet excuteQuery(String sql) {
ResultSet rs = null;
try {
conn = DBUtil.getConn1();
ps = conn.prepareStatement(sql);
rs = ps.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}

//查
public static ResultSet excuteQuery(String sql, Object[] argsValue) {
try {
conn = DBUtil.getConn1();
ps = conn.prepareStatement(sql); // 3.获取执行sql语句对象

for (int i = 0; i < argsValue.length; i++) {
ps.setObject(i + 1, argsValue[i]);
}
rs = ps.executeQuery(); // 4.执行sql业务
} catch (Exception e1) {
e1.printStackTrace();
}
return rs; // 5.返回结果集
}

public static void closeDB() {
try {
if (ps != null) {
ps.close();
}
} catch (SQLException e2) {
e2.printStackTrace();
} finally {
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e3) {
e3.printStackTrace();
}
}
}

// 增、删、改
public static void execute(String sql, Object[] argsValue) {
conn = DBUtil.getConn1();
try {
ps = conn.prepareStatement(sql);

for (int i = 0; i < argsValue.length; i++) {
ps.setObject(i + 1, argsValue[i]);
}
int i = ps.executeUpdate();
conn.commit();
} catch (Exception e1) {
e1.printStackTrace();
}
/* // 关闭连接或者可以这么写(2017.07.31更新)
finally {
6.关闭连接释放资源
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(ps!=null){
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
*/
}

public static void main(String[] args) throws SQLException{
String sql = "SELECT account,username,email FROM t_user_40118 where account= ?";
Object[] argsValue = new Object[]{"LuoWenqing"};
ResultSet resultSet = excuteQuery(sql, argsValue);
while (resultSet.next()) {
String account = resultSet.getString("account");
String username = resultSet.getString("username");
String email = resultSet.getString("email");
System.out.println(account + " " + username + " " + email);
}
closeDB(); // 6.关闭资源
}
}

IDEA数据库

打开右边的Datebase侧窗口,点击加号Data source,选择相应数据库,然后添加相应的数据信息,添加IDEA中执行数据库操作支持,可直接在IDEA中执行sql语句。

零碎知识

URI,URL,URN三者区别

  • URI:统一资源标识符,包括访问资源的方式,资源存放的位置,资源。如http://bitpoetry.io/posts/hello.html#intro
  • URL:URI的一种,不仅标识了Web 资源,还指定了操作或者获取方式,同时指出了主要访问机制和网络位置。如http://bitpoetry.io/posts/hello.html
  • URN:URI的一种,用特定命名空间的名字标识资源。使用URN可以在不知道其网络位置及访问方式的情况下讨论资源,比如bitpoetry.io/posts/hello.html#intro

参考:你知道URL、URI和URN三者之间的区别吗?

oracle三个配置文件

tnsnames.orasqlnet.oralistener.ora默认在$ORACLE_HOME/NETWORK/ADMIN目录下,我的在D:\oracle\product\10.2.0\db_1\BIN\NETWORK\ADMIN下

  • tnsnames.ora:客户及服务器端,类似于unix 的hosts文件,提供的tnsname到主机名或者ip的对应,只有当sqlnet.ora中类似

  • sqlnet.ora:客户及服务器端,类似于Linux或者其他unix的nsswitch.conf文件,通过这个文件来决定怎么样找一个连接中出现的连接字符串

  • listener.ora:服务器端,listener监听器进程的配置文件

参考资料

oracle: listener.ora 、sqlnet.ora 、tnsnames.ora的配置及例子