2014-03-06 42 views
4

我想弄清楚如何使用Java在MariaDB中編寫存儲過程。有一個補丁圍繞着說明它是可能的。我不確定這是否成爲標準。MariaDB:啓用Java存儲過程

如果您有任何人已經使用Java成功編寫MariaDB/MySQL的存儲過程,請告訴我。

回答

2

我承擔問題是關於使用Java作爲存儲過程的語言而不是SQL。這是不可能的。是的,Antony Curtis做了一些工作,這將使這種存儲過程成爲可能。唉,它不是MySQL/MariaDB或任何發行版的一部分。因此,至少現在,您將無法使用它。

Link to Antony's presentation about using external languages with MySQL

+0

那就是我也讀過的。我希望他們能夠把這個分配到這個分配中。丟人現眼... 。 –

2

Hej Martin,

我在一個月前做過這個。我使用JDBC連接到MySQL數據庫,但MariaDB是Drop-in替代品,所以我認爲它也適用於MariaDB實例。

這是我的工作示例代碼:

JDBCConnection類

package de.professional_webworkx.blog.sp.connector; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 

import com.mysql.jdbc.Driver; 

public class JDBCConnector { 

    public static JDBCConnector INSTANCE; 

    /* 
    * We need some connection information 
    * CHANGE THEM! 
    */ 
    private static final String USER = "USER"; 
    private static final String PASS = "PASS"; 
    private static final String HOST = "localhost"; 
    private static final String DB  = "DATABASE"; 
    private static final int PORT = 3306; 
    private static final String URL  = "jdbc:mysql://"+HOST+":"+PORT+"/"+DB; 
    private Connection connection; 

    private java.sql.PreparedStatement statement; 

    private JDBCConnector() { 
     connect(); 
    } 

    private void connect() { 

     try { 
      Driver driver = (Driver)Class.forName("com.mysql.jdbc.Driver").newInstance(); 
      DriverManager.registerDriver(driver); 
      connection = DriverManager.getConnection(URL, USER, PASS); 
     } 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(); 
     } 

    } 

    public void closeConnection() { 
     if(connection != null) { 
      try { 
       connection.close(); 
      } catch (SQLException e) { 
       System.err.println("Something went wrong while closing the connection"); 
      } 
     } 
    } 

    public void getCustomerCount() { 
     try { 
      Statement statement = connection.createStatement(); 
      ResultSet rs = statement.executeQuery("SELECT COUNT(*) FROM customer;"); 
      while(rs != null && rs.next()){ 
       System.out.println(rs.getInt(1)); 
      } 

     } catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

    public void addStoredProcedure() { 
     try { 
      String sql = "create procedure myProc() " 
        + "BEGIN " 
        + "SELECT COUNT(*) as total FROM customer;" 
        + "END"; 
      statement = connection.prepareStatement(sql); 
      statement.execute(); 
     } catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
    public static JDBCConnector getInstance() { 
     if(INSTANCE == null) { 
      INSTANCE = new JDBCConnector(); 
     } 

     return INSTANCE; 
    } 
} 

並啓動它:

package de.professional_webworkx.blog.sp; 

import de.professional_webworkx.blog.sp.connector.JDBCConnector; 


public class App 
{ 
    public static void main(String[] args) 
    { 
     JDBCConnector connector = JDBCConnector.getInstance(); 
     // create the Stored Procedure in your DB 
     connector.addStoredProcedure(); 
    } 
} 

我也把這個例子的代碼GitHub

+1

感謝您的回答。你所做的是使用Java連接到MariaDB。我正在尋找的是使用java語言而不是古怪的SQL編寫存儲過程。正如弗拉迪斯拉夫所言,現在它不可能實現。 –