mysql存储过程queue_mysql – 在Sequelize中调用输入/输出类型存储过程

我在

MySQL中创建了一个存储过程,它期望一些输入并返回一些输出.

要在MySQL中调用存储过程,我正在运行

CALL createCoupon(1236,321, @message);

SELECT @message AS message

并在消息对象中获取输出.

现在我需要在sequelize中称之为SP的情况.我正在研究sailsjs项目并使用sequelize模块进行排队.

我在config / db_config中创建了数据库连接,我的连接字符串是:

var sequelize = new Sequelize(db.name, db.user, db.pass, {

host: db.host,

dialect: "mysql", // or 'sqlite', 'postgres', 'mariadb'

port: 3306, // or 5432 (for postgres)

maxConcurrentQueries: 100,

pool: {

maxConnections: 50,

maxIdleTime: 2000

},

queue: true

})

我在控制器中称它为:

var Sequelize = require('sequelize');

var sequelize = require('../../config/db_config').dbase;

function setCoupon(couponCode, userId, setCouponResponse) {

var createCouponSQL = "some raw query";

sequelize.query(createCouponSQL, null, {

raw: true

}).success(function(createCoupon) {

sails.log.info(createCoupon);

setCouponResponse(null, createCoupon);

}).error(function(err) {

sails.log.error(err);

setCouponResponse(err, null);

});

}

module.exports = {

'createCoupon': function(req, callback) {

setCoupon(req.param('coupon_code'), req.session.userSession, function(err, setCouponResponse){

})

}

}

现在我需要在续集中调用SP,所以我只是尝试:

var createCouponSQL = "CALL createCoupon(1236,321, @message);";

createCouponSQL += "SELECT @message AS message";

sequelize.query(createCouponSQL, null, {

raw: true

}).success(function(createCoupon) {

sails.log.info(createCoupon);

setCouponResponse(null, createCoupon);

}).error(function(err) {

sails.log.error(err);

setCouponResponse(err, null);

});

但sequlize触发错误:

Executing (default): CALL createCoupon(1236,321, @message);SELECT @message AS m

essage

error: Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the m

anual that corresponds to your MySQL server version for the right syntax to use

near 'SELECT @message AS message' at line 1

at Query.Sequence._packetToError (C:\Users\asd\Desktop\CardCash P2\Website\

node_modules\mysql\lib\protocol\sequences\Sequence.js:30:14)

我已经完成了一些R& D但是却找不到任何适当的东西来调用一个存储过程,它将我的响应发送回@message并且我需要执行另一个select语句来获得结果.

请指导我如何使用我连接数据库的方式正确地完成此操作.

谢谢.

好的,以下是一个简单的Java代码实现: ```java import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.LinkedBlockingQueue; public class DownloadThreadPool { private static final int THREAD_POOL_SIZE = 10; // 线程池大小 private static final int QUEUE_SIZE = 100; // 队列大小 private ExecutorService executorService; private LinkedBlockingQueue<DownloadTask> queue; public DownloadThreadPool() { executorService = Executors.newFixedThreadPool(THREAD_POOL_SIZE); queue = new LinkedBlockingQueue<>(QUEUE_SIZE); } public void addTask(DownloadTask task) { // 将任务放入队列 queue.offer(task); } public void start() { // 启动线程池 for (int i = 0; i < THREAD_POOL_SIZE; i++) { executorService.execute(new DownloadWorker(queue)); } } } class DownloadTask { // 任务属性,比如下载链接、存储路径等等 } class DownloadWorker implements Runnable { private LinkedBlockingQueue<DownloadTask> queue; public DownloadWorker(LinkedBlockingQueue<DownloadTask> queue) { this.queue = queue; } @Override public void run() { while (true) { try { // 从队列取出任务 DownloadTask task = queue.take(); // 处理任务,比如下载文件并存储到指定路径 // ... // 将任务插入到 MySQL 数据库 // ... } catch (InterruptedException e) { e.printStackTrace(); } } } } ``` 在上面的代码,我们定义了一个 `DownloadThreadPool` 类来管理下载任务的线程池和任务队列。用户可以通过调用 `addTask` 方法来向队列添加下载任务。当调用 `start` 方法时,线程池就会启动,开始从队列取出任务并执行。 我们还定义了一个 `DownloadTask` 类来表示下载任务,其包含了一些任务属性,比如下载链接、存储路径等等。 最后,我们定义了一个 `DownloadWorker` 类来实现具体的任务处理逻辑。在 `run` 方法,它会不断地从队列取出任务并处理。处理完成后,还可以将任务插入到 MySQL 数据库,以便后续使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值