簡體   English   中英

如何在Java中使用jdbc對Oracle 10g執行日志挖掘器PL / SQL查詢

[英]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編寫相同的查詢以正確執行? 有人可以告訴我嗎?

您的代碼有幾個問題:

  1. 您不能通過單個executeUpdate()調用運行多個語句
  2. executeUpdate()永遠不會返回結果集,您需要使用execute()executeQuery()
  3. shutdownstartup是SQL * Plus命令,不能通過JDBC執行。 從11.1開始,Oracle JDBC驅動程序中有了擴展,您可以通過它進行擴展: http : //docs.oracle.com/cd/E11882_01/java.112/e16548/dbmgmnt.htm#CHDJABJI
    但是我不知道這是否也適用於Oracle 10(如果我沒記錯的話,它將不予支持,無論如何,您都應該升級到11.x)
  4. show parameter是無法從JDBC運行的SQL * Plus命令。 您需要改為select * from v$parameter運行select * from v$parameter

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM