當前位置:首頁 » 數據倉庫 » java調用oracle資料庫
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

java調用oracle資料庫

發布時間: 2022-11-19 17:49:16

1. java怎麼調用oracle的過程

java.sql
裡面的

public interface CallableStatement

extends PreparedStatement

用於執行 SQL 存儲過程的介面。JDBC API 提供了一個存儲過程 SQL 轉義語法,該語法允許對所有 RDBMS
使用標准方式調用存儲過程。此轉義語法有一個包含結果參數的形式和一個不包含結果參數的形式。如果使用結果參數,則必須將其注冊為 OUT
參數。其他參數可用於輸入、輸出或同時用於二者。參數是根據編號按順序引用的,第一個參數的編號是 1。
{?= call <procere-name>[(<arg1>,<arg2>, ...)]}
{call <procere-name>[(<arg1>,<arg2>, ...)]}

2. 在java 中怎樣調用oracle資料庫中的數據

public class Text {

public static final void main(String args[]){
Connection con = null;
try {
//1,載入驅動程序
Class.forName("oracle.jdbc.driver.OracleDriver");
//2,連接字元串
String s = "jdbc:oracle:thin:@localhost:1521:shitou";
//3,獲得資料庫連接
con = DriverManager.getConnection(s,"system","abc");
//4,獲得語句對象
Statement stat = con.createStatement();
//5,執行sql
ResultSet rs = stat.executeQuery("select * from comp");

3. 怎麼用java連接oracle資料庫,需要詳細解釋

1)首先你要有java連接oracle資料庫的驅動類,下載好後導入到工程里

2)代碼:
import java.sql.*;

public class JDBCTest {

/**
* @param args
* @throws ClassNotFoundException
*/
public static void main(String[] args)
throws ClassNotFoundException, SQLException{
//1.准備參數
String ip = "192.168.0.26";
String sid = "tarena";
String port = "1521";
String dbUser = "openlab";
String dbPassword = "open123";
String driver
= "oracle.jdbc.driver.OracleDriver";

//2.構造驅動實例
Class.forName(driver);

//3.創建連接
//連接字元串是固定的形式,oracle的形式:
String url
= "jdbc:oracle:thin:@"
+ ip + ":" + port + ":" + sid;
Connection conn
= DriverManager.getConnection
(url, dbUser, dbPassword);
//4.執行SQL語句
String sql = "select id, password, name from user_sd1104 " +
"where id = 1001 and password = '1234'";
Statement stmt = conn.createStatement();
ResultSet rs
= stmt.executeQuery(sql);//執行sql語句
while(rs.next()){
int id = rs.getInt(1);
String pwd = rs.getString(2);
String name = rs.getString(3);
System.out.println("welcome," + name);
}
rs.close();
stmt.close();
conn.close();
}

}

4. Java調用oracle來更新資料庫信息

安裝完Oracle客戶端後,裡面有個jdbc的文件夾,該文件夾下就包含了OCI驅動和THIN驅動。所以是不需要去網上下載的。這個驅動在jdbc/lib文件夾下,主要有classes12.jar、nls_charset12.jar等等。其中以12結尾的驅動包適應於jdk1.1以上的版本。以11結尾的適應於jdk1.1以下的版本。文件名中含有classes的jar包就是驅動程序,文件名中含有nls的jar包是與國際化有關的類。
找到文件後,就需要把class和nls的jar包的絕對路徑加入CLASS_PATH環境變數,否則會報ClassNotFound的異常。
設置環境變數後,就可以直接使用OCI驅動了,不要被「驅動」兩個字嚇壞了,(驅動就是一個可執行文件和一個連接字元串)。很簡單,無非是連接字元串的問題。標準的連接字元串如下所示:
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:oci:@xxzc","ansiyuan", "oracle_password");
只要這兩行,就可以保證連接到資料庫,而這個資料庫不管是單個資料庫還是集群資料庫。其中xxzc就是資料庫名,ansiyuan就是用戶名,oralce_password就是密碼。這種方式和C#中的方式比較類似。
需要注意的問題:
1、oracle_home/jdbc文件夾下有大量的樣板代碼和幫助文檔,裡面對如何安裝和使用jdbc都有詳細的說明,請引起高度重視並耐心閱讀。裡面有很多知識僅通過自己反復的實踐是無法獲取的。
2、如果想要高性能,請使用OCI連接,如果不想裝Oracle客戶端,請使用thin連接。

5. 用java,調用oracle資料庫

public class Text {

public static final void main(String args[]){
Connection con = null;
try {
//1,載入驅動程序
Class.forName("oracle.jdbc.driver.OracleDriver");
//2,連接字元串
String s = "jdbc:oracle:thin:@localhost:1521:shitou";
//3,獲得資料庫連接
con = DriverManager.getConnection(s,"system","abc");
//4,獲得語句對象
Statement stat = con.createStatement();
//5,執行sql
ResultSet rs = stat.executeQuery("select * from comp");

6. 淺談如何利用Java的JDBC操作Oracle資料庫

JavaJDBC中操作Oracle資料庫,經過以下幾個步驟
1.將OracleHome/jdbc/lib/目錄的所有文件添加到jre/lib/ext目錄;(配置JavaJDBC驅動)
2.創建odbc源,在控制面板=》管理工具=》數據源(odbc)中添加DSN,比如取名為OracleDSN,選擇一個Service,輸入用戶名密碼,測試連接,若通過說明成功;
3.在程序中載入jdbc驅動(下面的例子用的是JdbcOdbc驅動),建立連接,執行Query.
下面是連接OracleDSNODBCdatasource的一個類,方法Test()連接資料庫後,讀取tbljob的內容,並顯示所有記錄。


importjava.sql.*;
classOracleConnect{
publicstaticvoidTest(){
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Stringurl="jdbc:odbc:OracleDSN";
Connectionconn=DriverManager.getConnection(url,"system","system_passwd");
Statementstmt=conn.createStatement();
ResultSetrset=stmt.executeQuery("select*fromtbljob;");
while(rset.next())
System.out.println(rset.getString(1)+""+rset.getString(2));
rset.close();
stmt.close();
conn.close();
}catch(Exceptione){
e.printStackTrace();
}
}
}

7. 如何使用java語言調用oracle存儲過程

1.api上的方法為 Connection.prepareCall(java.lang.String)
2.prepareCall(String sql)
throws SQLException
參數:sql - 可以包含一個或多個 '?' 參數佔位符的 SQL 語句。通常此語句是使用 JDBC 調用轉義語法指定的。
3.JDBC API 提供了一個存儲過程 SQL 轉義語法,該語法允許對所有 RDBMS 使用標准方式調用存儲過程。此轉義語法有一個包含結果參數的形式和一個不包含結果參數的形式。分別為:
{?= call <procere-name>[(<arg1>,<arg2>, ...)]}
{call <procere-name>[(<arg1>,<arg2>, ...)]}

4.示例,無返回值調用:Connection.prepareCall({ call p_test(p1,p2)})

8. java怎樣通過jdbc來訪問oracle資料庫的存儲過程和存儲函數

//存儲過程create
or
replace
Procere
countBySal(
p_sal
emp.sal%type,
p_count
OUT
number
)as
begin
select
count(*)
into
p_count
from
emp
where
sal
>=
p_sql;
end
countBySal;
//調用步奏import
java.sql.CallableStatement;
//帶哦用存儲過程所必須的語句借口
import
java.sql.Connection;
import
java.sql.DriverManager;
import
java.sql.Types;public
class
EmpUtil
{
public
static
int
countBySal(double
sal)
throws
Exception{
Class.forName("oracle.jdbc.driver.OracleDriver");
String
url="jdbc:oracle:thin:@localhost:1521:test";
Connection
cn=DriverManager.getConnection(url,
"scott",
"tiger");
String
sql="{call
countBySal(?,?)}";//調用存儲過程的語句,call後面的就是存儲過程名和需要傳入的參數
CallableStatement
cst=cn.prepareCall(sql);
cst.setDouble(1,
sal);//設置in參數的值
cst.registerOutParameter(2,
Types.INTEGER);//注冊out參數的類型
cst.execute();
int
result
=
cst.getInt(2);
cst.close();
cn.close();
return
result;
}
public
static
void
main(String[]
args)
{
int
count;
try
{
count
=
EmpUtil.countBySal(3000);
System.out.println("工資在3000元以上的人數為:"+count);
}
catch
(Exception
e)
{
e.printStackTrace();
}
}

9. 怎麼實現用java訪問oracle資料庫

這個是完全沒有問題的。

先期准備:
1、兩台電腦必須要聯網,能夠訪問到
2、將oracle的驅動程序拷貝到你的java的電腦上,並設置到環境變數中。

java代碼
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DbTest {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement prstm = null;
ResultSet rs = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@ip:port:orcl"; //資料庫連接字元串,需要替換ip,port,orcl
String user="user"; //用戶名,需要替換你的資料庫的用戶名
String password="pswd"; //密碼,需要替換為對應的密碼
conn = DriverManager.getConnection(url,user,password); //獲取連接

prstm = conn.prepareStatement("SELECT 1 TEST_ID FROM DUAL");
rs = prstm.executeQuery();
while (rs.next()) {
System.out.println("查詢結果為:" + rs.getInt("TEST_ID"));
}
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
//使用完畢進行相關內容的關閉,注意相關順序
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (prstm != null) {
try {
prstm.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

}

10. java怎麼調用oracle的過程

參考下面代碼
java下實現調用oracle的存儲過程和函數
在oracle下創建一個test的賬戶,然後按一下步驟執行:
1.創建表:STOCK_PRICES

--創建表格
CREATE TABLE STOCK_PRICES(
RIC VARCHAR(6) PRIMARY KEY,
PRICE NUMBER(7,2),
UPDATED DATE );

2.插入測試數據:

--插入數據
INSERT INTO stock_prices values('1111',1.0,SYSDATE);
INSERT INTO stock_prices values('1112',2.0,SYSDATE);
INSERT INTO stock_prices values('1113',3.0,SYSDATE);
INSERT INTO stock_prices values('1114',4.0,SYSDATE);

3.建立一個返回遊標: PKG_PUB_UTILS

--建立一個返回遊標
CREATE OR REPLACE PACKAGE PKG_PUB_UTILS IS
--動態游標
TYPE REFCURSOR IS REF CURSOR;
END PKG_PUB_UTILS;

4.創建和存儲過程:P_GET_PRICE

--創建存儲過程
CREATE OR REPLACE PROCEDURE P_GET_PRICE
(
AN_O_RET_CODE OUT NUMBER,
AC_O_RET_MSG OUT VARCHAR2,
CUR_RET OUT PKG_PUB_UTILS.REFCURSOR,
AN_I_PRICE IN NUMBER
)
IS
BEGIN
AN_O_RET_CODE := 0;
AC_O_RET_MSG := '操作成功';

OPEN CUR_RET FOR
SELECT * FROM STOCK_PRICES WHERE PRICE<AN_I_PRICE;
EXCEPTION
WHEN OTHERS THEN
AN_O_RET_CODE := -1;
AC_O_RET_MSG := '錯誤代碼:' || SQLCODE || CHR(13) || '錯誤信息:' || SQLERRM;
END P_GET_PRICE;

5.創建函數:

--創建函數:F_GET_PRICE
CREATE OR REPLACE FUNCTION F_GET_PRICE(v_price IN NUMBER)
RETURN PKG_PUB_UTILS.REFCURSOR
AS
stock_cursor PKG_PUB_UTILS.REFCURSOR;
BEGIN
OPEN stock_cursor FOR
SELECT * FROM stock_prices WHERE price < v_price;
RETURN stock_cursor;
END;

6.JAVA調用存儲過程返回結果集
代碼示例:JDBCoracle10G_INVOKEPROCEDURE.java

import java.sql.*;
import oracle.jdbc.OracleCallableStatement;
import oracle.jdbc.OracleTypes;

/* 本例是通過調用oracle的存儲過程來返回結果集:
* oracle 9i、10G 的jdbc由1個jar包組成:classes12.zip
*/
public class JDBCoracle10G_INVOKEPROCEDURE {
Connection conn = null;
Statement statement = null;
ResultSet rs = null;
CallableStatement stmt = null;

String driver;
String url;
String user;
String pwd;
String sql;
String in_price;

public JDBCoracle10G_INVOKEPROCEDURE()
{
driver = "oracle.jdbc.driver.OracleDriver";
url = "jdbc:oracle:thin:@localhost:1521:ORCL";
// oracle 用戶
user = "test";
// oracle 密碼
pwd = "test";
init();
// mysid:必須為要連接機器的sid名稱,否則會包以下錯:
// java.sql.SQLException: Io 異常: Connection
// refused(DESCRIPTION=(TMP=)(VSNNUM=169870080)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))
// 參考連接方式:
// Class.forName( "oracle.jdbc.driver.OracleDriver" );
// cn = DriverManager.getConnection(
// "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd );

}

public void init() {
System.out.println("oracle jdbc test");
try {
Class.forName(driver);
System.out.println("driver is ok");
conn = DriverManager.getConnection(url, user, pwd);
System.out.println("conection is ok");
statement = conn.createStatement();
// conn.setAutoCommit(false);
// 輸入參數
in_price = "3.0";
// 調用函數
stmt = conn.prepareCall("call P_GET_PRICE(?,?,?,?)");
stmt.registerOutParameter(1, java.sql.Types.FLOAT);
stmt.registerOutParameter(2, java.sql.Types.CHAR);
stmt.registerOutParameter(3, oracle.jdbc.OracleTypes.CURSOR);
stmt.setString(4, in_price);
stmt.executeUpdate();
int retCode = stmt.getInt(1);
String retMsg = stmt.getString(2);
if (retCode == -1) { // 如果出錯時,返回錯誤信息
System.out.println("報錯!");
} else {
// 取的結果集的方式一:
rs = ((OracleCallableStatement) stmt).getCursor(3);
// 取的結果集的方式二:
// rs = (ResultSet) stmt.getObject(3);
String ric;
String price;
String updated;
// 對結果進行輸出
while (rs.next()) {
ric = rs.getString(1);
price = rs.getString(2);
updated = rs.getString(3);
System.out.println("ric:" + ric + ";-- price:" + price
+ "; --" + updated + "; ");
}
}

} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("close ");
}
}

public static void main(String args[])// 自己替換[]
{
new JDBCoracle10G_INVOKEPROCEDURE();
}
}

7.開發JAVA調用函數返回結果集
代碼示例:JDBCoracle10G_INVOKEFUNCTION.java

import java.sql.*;
import oracle.jdbc.OracleCallableStatement;
import oracle.jdbc.OracleTypes;

/*
/* 本例是通過調用oracle的函數來返回結果集:
* oracle 9i、10G 的jdbc由1個jar包組成:classes12.zip
*/
public class JDBCoracle10G_INVOKEFUNCTION {
Connection conn = null;
Statement statement = null;
ResultSet rs = null;
CallableStatement stmt = null;

String driver;
String url;
String user;
String pwd;
String sql;
String in_price;

public JDBCoracle10G_INVOKEFUNCTION()
{
driver = "oracle.jdbc.driver.OracleDriver";
url = "jdbc:oracle:thin:@localhost:1521:ORCL";
// oracle 用戶
user = "test";
// oracle 密碼
pwd = "test";
init();
// mysid:必須為要連接機器的sid名稱,否則會包以下錯:
// java.sql.SQLException: Io 異常: Connection
// refused(DESCRIPTION=(TMP=)(VSNNUM=169870080)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))
// 參考連接方式:
// Class.forName( "oracle.jdbc.driver.OracleDriver" );
// cn = DriverManager.getConnection(
// "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd );
}

public void init() {
System.out.println("oracle jdbc test");
try {
Class.forName(driver);
System.out.println("driver is ok");
conn = DriverManager.getConnection(url, user, pwd);
System.out.println("conection is ok");
statement = conn.createStatement();
// conn.setAutoCommit(false);
// 輸入參數
in_price = "5.0";
// 調用函數
stmt = conn.prepareCall("{? = call F_GET_PRICE(?)}");
// stmt.registerOutParameter(1, java.sql.Types.FLOAT);
// stmt.registerOutParameter(2, java.sql.Types.CHAR);
stmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
stmt.setString(2, in_price);
stmt.executeUpdate();
// 取的結果集的方式一:
rs = ((OracleCallableStatement) stmt).getCursor(1);
// 取的結果集的方式二:
// rs = (ResultSet) stmt.getObject(1);
String ric;
String price;
String updated;

while (rs.next()) {
ric = rs.getString(1);
price = rs.getString(2);
updated = rs.getString(3);
System.out.println("ric:" + ric + ";-- price:" + price + "; --"
+ updated + "; ");
}

} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("close ");
}
}

public static void main(String args[])// 自己替換[]
{
new JDBCoracle10G_INVOKEFUNCTION();
}
}