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

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

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

【问题讨论】:

    标签: java mysql stored-procedures mariadb


    【解决方案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 编写存储过程。正如弗拉迪斯拉夫所说,它现在不可能接缝。
    猜你喜欢
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    • 2021-09-20
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多