![](/img/trans.png)
[英]trying to execute SQL query on an oracle 10g database using java but getting ORA-00911 error
[英]How to execute log miner PL/SQL query for oracle 10g using jdbc in java
我正在為我的項目使用Oracle中稱為LogMiner的工具。 我在Windows 7 32位計算機上使用Oracle 10g。
為了啟動日志挖掘器工具,我登錄到sqlplus
並執行以下查詢:
//Query to create flat file
alter system set utl_file_dir='C:\oracle\product\10.2.0\logminer_dir' scope=spfile;
shutdown immediate
startup
show parameter utl_file_dir
SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;
alter system switch logfile;
使用sqlplus可以很好地運行此PL / SQL查詢,但是現在我想在Java中使用jdbc運行相同的查詢
我為此編寫了以下代碼:
package src;
import java.awt.event.ActionEvent;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;
public class LogMiner extends javax.swing.JFrame {
private JLabel jLabel1;
private JButton jButton1;
private JButton jButton4;
private JButton jButton3;
private JButton jButton2;
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
LogMiner inst = new LogMiner();
inst.setLocationRelativeTo(null);
inst.setVisible(true);
}
});
}
public LogMiner() {
super();
initGUI();
}
private void initGUI() {
try {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
getContentPane().setLayout(null);
{
jLabel1 = new JLabel();
getContentPane().add(jLabel1);
jLabel1.setText("LogMiner Tool");
jLabel1.setBounds(236, 18, 97, 21);
}
{
jButton1 = new JButton();
getContentPane().add(jButton1);
jButton1.setText("Create the flat file");
jButton1.setBounds(212, 71, 133, 28);
}
pack();
setSize(600, 400);
} catch (Exception e) {
e.printStackTrace();
}
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
//write query statement
try
{
// load oracle driver
Class.forName("oracle.jdbc.driver.OracleDriver");
// connect using Thin driver
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:test","system","oracle");
System.out.println("Connected Successfully To Oracle");
//getting errors in the following line...need help here
String sql="alter system set
utl_file_dir='C:\oracle\product\10.2.0\logminer_dir'scope=spfile;"
+"shutdown immediate"+
"startup"+
"show parameter utl_file_dir"+
"SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE"+
"alter system switch logfile";
Statement statement = con.createStatement();
ResultSet resultset = statement.executeUpdate(sql);
resultset.next();
String s = resultset.getString(1);
System.out.println(s);
statement.close();
con.close();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
});
}
}
我應該如何用Java編寫相同的查詢以正確執行? 有人可以告訴我嗎?
您的代碼有幾個問題:
executeUpdate()
調用運行多個語句 executeUpdate()
永遠不會返回結果集,您需要使用execute()
或executeQuery()
shutdown
和startup
是SQL * Plus命令,不能通過JDBC執行。 從11.1開始,Oracle JDBC驅動程序中有了擴展,您可以通過它進行擴展: http : //docs.oracle.com/cd/E11882_01/java.112/e16548/dbmgmnt.htm#CHDJABJI show parameter
是無法從JDBC運行的SQL * Plus命令。 您需要改為select * from v$parameter
運行select * from v$parameter
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.