Mycat1.6系列使用MySQL后端存储过程2019-11-20 06:23:27

测试版本:mycat 1.6.74 

2019-11-20 06:23:27之后

dn4的配置<dataNode name="dn4" dataHost="localhost4" database="db1" /> 
localhost4是mysql数据源

 

mycat中会对一些sql语句进行随机路由(一般是没有from的查询sql)

<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" randomDataNode="dn4">
randomDataNode="dn1" 可以强制把这些sql发送指定节点

 

db1中的存储过程

DELIMITER &&
    CREATE PROCEDURE p_test2(OUT p_id INT)
        BEGIN
            SET p_id = 22;    -- 将 p_id 赋值为 22 
        END&&
DELIMITER ;

 

JDBC使用存储过程的方法

     connection.setAutoCommit(false);
 try (Statement statement = connection.createStatement()) {
 statement.executeUpdate("/* mycat:dataNode = dn4 */SET @P_id = 100;\n");
statement.executeUpdate("/* mycat:dataNode = dn4 */CALL p_test2(@p_id);");
ResultSet resultSet = statement.executeQuery("/* mycat:dataNode = dn4 */SELECT @p_id AS c;");
boolean next = resultSet.next();
Object object = resultSet.getObject(1);//22
}
//提交事务?

如果出现后端连接提早释放可以开启严格事务

 

有randomDataNode的情况下实际上也不需要写注解了直接

SET autocommit = 0;
SET @P_id = 100;
CALL p_test2(@p_id);
SELECT @p_id AS c;
COMMIT;

即可

SET autocommit = 0;是使session不会被mycat在执行sql之后释放该mysql连接

注解和randomDataNode的作用是指定dataNode

SELECT @p_id AS c;是把结果作为查询语句返回

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值