MariaDB:启用 Java 存储过程

Posted

技术标签:

【中文标题】MariaDB:启用 Java 存储过程【英文标题】:MariaDB: Enable Java Stored Procedure 【发布时间】:2014-04-09 04:45:16 【问题描述】:

我正在尝试弄清楚如何使用 Java 在 MariaDB 中编写存储过程。有一个补丁漂浮在上面,说明这是可能的。我不确定这是否已成为可用的标准。

如果有人使用 Java 成功为 MariaDB / mysql 编写过存储过程,请告诉我。

【问题讨论】:

【参考方案1】:

我认为问题是关于使用 Java 作为存储过程的语言,而不是 SQL。这是不可能的。是的,Antony Curtis 做了一些工作,使这种存储过程成为可能。唉,它不是 MySQL/MariaDB 或任何发行版的一部分。因此,您至少现在无法使用它。

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

【讨论】:

这也是我读到的。我希望他们设法将其纳入发行版。可惜了……【参考方案2】:

赫吉·马丁,

我在一个月前做了这个。我使用 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

【讨论】:

感谢您的回答。您所做的是使用 Java 连接到 MariaDB。我一直在寻找的是使用 java 语言而不是古怪的 SQL 编写存储过程。正如弗拉迪斯拉夫所说,它现在不可能接缝。

以上是关于MariaDB:启用 Java 存储过程的主要内容,如果未能解决你的问题,请参考以下文章

MariaDB的存储过程和函数

在 MySQL/MariaDB 中创建存储过程时出错

MySQL/MariaDB 中的存储过程不允许使用 NULL 参数

MariaDB 存储过程 - 在 INSERT 语句中出现错误“缺少 SELECT”

SQLSERVER启用存储过程

数据库-mysql储存过程