-
添加
Oracle JDBC
的驅(qū)動(dòng)
在我的電腦上,它的位置是:C:\app\Berlin\oracleDB\product\12.2.0\dbhome_1\jdbc\lib
在此選擇ojdbc8_g.jar
,將其添加到依賴庫中益涧。 - 編寫
java
代碼
public class DBConnection {
public static void main(String[] args){
Connection con = null;// 創(chuàng)建一個(gè)數(shù)據(jù)庫連接
PreparedStatement pre = null;// 創(chuàng)建預(yù)編譯語句對(duì)象,一般都是用這個(gè)而不用Statement
ResultSet result = null;// 創(chuàng)建一個(gè)結(jié)果集對(duì)象
try{
Class.forName("oracle.jdbc.driver.OracleDriver");// 加載Oracle驅(qū)動(dòng)程序
System.out.println("開始嘗試連接數(shù)據(jù)庫驯鳖!");
String url = "jdbc:oracle:thin:@127.0.0.1:1521:ORCL";// 127.0.0.1是本機(jī)地址闲询,XE是精簡版Oracle的默認(rèn)數(shù)據(jù)庫名
String user = "scott";// 用戶名,系統(tǒng)默認(rèn)的賬戶名
String password = "tiger";// 你安裝時(shí)選設(shè)置的密碼
con = DriverManager.getConnection(url, user, password);// 獲取連接
System.out.println("連接成功!");
String sql = "select * from dept where deptno<? AND LOC LIKE ?";// 預(yù)編譯語句浅辙,“扭弧?”代表參數(shù)
pre = con.prepareStatement(sql);// 實(shí)例化預(yù)編譯語句
pre.setInt(1, 40);// 設(shè)置參數(shù),前面的1表示上面預(yù)編譯語句中的?參數(shù)的索引记舆,
pre.setString(2,"NEW%");
result = pre.executeQuery();// 執(zhí)行查詢鸽捻,注意括號(hào)中不需要再加參數(shù)
while (result.next())
// 當(dāng)結(jié)果集不為空時(shí)
System.out.println("DNAME:" + result.getInt("DNAME") + "\t DNAME:"
+ result.getString("DNAME")+"\t LOC:"
+ result.getString("LOC"));
} catch (Exception e) {
e.printStackTrace();
} finally {
try{
// 逐一將上面的幾個(gè)對(duì)象關(guān)閉,因?yàn)椴魂P(guān)閉的話會(huì)影響性能、并且占用資源
// 注意關(guān)閉的順序御蒲,最后使用的最先關(guān)閉
if (result != null)
result.close();
if (pre != null)
pre.close();
if (con != null)
con.close();
System.out.println("數(shù)據(jù)庫連接已關(guān)閉衣赶!");
} catch (Exception e){
e.printStackTrace();
}
}
}
}
DEPT
表的內(nèi)容:
SQL> select * from dept;
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
而代碼中的語句:
String sql = "select * from dept where deptno<? AND LOC LIKE ?";// 預(yù)編譯語句,“厚满?”代表參數(shù)
pre = con.prepareStatement(sql);// 實(shí)例化預(yù)編譯語句
pre.setInt(1, 40);// 設(shè)置參數(shù)府瞄,前面的1表示上面預(yù)編譯語句中的?參數(shù)的索引,
pre.setString(2,"NEW%");
運(yùn)行結(jié)果是:
開始嘗試連接數(shù)據(jù)庫碘箍!
連接成功摘能!
DEPTNO:10 DNAME:ACCOUNTING LOC:NEW YORK
數(shù)據(jù)庫連接已關(guān)閉!
Process finished with exit code 0
3.注意
-
LOC like 'NEW%'
不能寫成LOC = 'NEW%'
敲街,前者是模糊查詢团搞。 - 應(yīng)當(dāng)使用
preparedStatement
來查詢(而避免使用Statement
)。在其中注意到有?
多艇,后面將使用setXxxx
方法來填充(如setInt
或setString
等等)逻恐。 - 對(duì)于填充問號(hào),不要這么寫:
select * from dept where ? like 'NEW%'
峻黍,.setString(1,"LOC")
复隆。否則會(huì)提示java.sql.SQLSyntaxErrorException: ORA-00904: "NEW%": 標(biāo)識(shí)符無效
,也就是說它用來填充參數(shù)等姆涩,不要填充關(guān)鍵字等挽拂。 - 連接Oracle數(shù)據(jù)庫,使用
String url = "jdbc:oracle:thin:@127.0.0.1:1521:ORCL";
語句骨饿,其中ORCL
是數(shù)據(jù)庫名亏栈。若查詢數(shù)據(jù)庫名:- 首先以管理員身份登入:
conn sys/password as sysdba
- 然后輸入
select name from v$database;
即可查詢。
- 首先以管理員身份登入: