数据库_游标的简单使用实例和分析

概述:游标只读取结果集数据,一行一行的读取,而且只能从头开始一行行往尾部读取,不能从中任意读取,而如果重新使用则从第一个开始。使用前必先定义,具体模板看代码。作用是遍历结果集。

存储过程blog(点击)

以下例投票操作举例子:用户每创建(添加)一张投票表格(tno),将这张表单发送给每一个用户,即对应的table_belongto_user添加该tno,且默认为未投票,is_vote:0,这里的0是数据库的默认值设置与游标和存储过程无关。

table_belongto_user表结构:

 

结果:

注意tno,这是用游标遍历结果集将tno添加给每一个用户的

 

建立过程:

存储过程IN 参数为tno.

存储过程建立头部分省略
BEGIN
	DECLARE id int;
	#游标创建过程
	DECLARE  no_more_record INT DEFAULT 0;                //初始化游标的初始状态0
	DECLARE curssor CURSOR FOR SELECT uid from `user`;    //定义游标curssor,注意后面的select'语句为结果集,意味游标遍历该结果集
	DECLARE  CONTINUE HANDLER FOR NOT FOUND  SET  no_more_record = 1;  //定义游标执行完的状态为1
	OPEN curssor;                                         //使用打开游标
	FETCH  curssor INTO id;                               //游标遍历一个数据

WHILE  no_more_record != 1 DO

INSERT INTO table_belongto_user(tno,uid,is_vote) VALUES(tno,id,0);
FETCH  curssor INTO id;                                   //while循环中一个个遍历数据

END WHILE;
END

 

一、上述存储过程可以用for循环来理解;

DECLARE curssor CURSOR FOR SELECT uid from `user`; 

相当于for循环的数组(result)。即,获取结果集(SELECT uid from `user`;)从而运用FETCH一条条遍历其数据(结果),来进行操作。

二、

DECLARE  no_more_record INT DEFAULT 0;
DECLARE  CONTINUE HANDLER FOR NOT FOUND  SET  no_more_record = 1;

定义no_more_record=0;   意义为标志着游标未遍历完结果集,继续遍历

第二句的意思为若没有数据返回,程序继续,并将变量no_more_record设为1,即遍历完结果集。

三、

OPEN curssor;                                         //使用打开游标
FETCH  curssor INTO id; 

open curssor相当于赋值于int i = 0;

FETCH curssor INTO id; 相当于 首先 curror  = result[i] 再赋值给id , id = curssor;

执行完一句FETCH 游标会进入下一个结果,相当于i++;意思就是一个FETCH语句就是一个++;

四、

遇到的错误:ERROR 1337 (42000): Variable or condition declaration after cursor

错误原因:

所有的声明变量应该放到游标后。

按照指定顺序即可,如上。

 

参考博客

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,您的问题是树莓派如何将采集到的数据上传到数据库中,以及一个PLC数据采集的实例? 首先,要将采集到的数据上传到数据库中,您需要安装数据库,并使用相关的库将数据写入数据库中。常见的数据库有MySQL、PostgreSQL、MongoDB等。您可以选择根据自己的需求选择适合的数据库。 以下是一个将采集到的数据写入MySQL数据库的Python示例代码: ```python import MySQLdb # 连接数据库 db = MySQLdb.connect(host="localhost", user="root", passwd="password", db="testdb") # 创建游标 cursor = db.cursor() # 插入数据 sql = "INSERT INTO data (value) VALUES (%s)" value = 10 cursor.execute(sql, (value,)) # 提交更改 db.commit() # 关闭游标数据库连接 cursor.close() db.close() ``` 以上代码中,我们首先连接到MySQL数据库,然后创建一个游标用于执行SQL语句。接着,我们插入一条数据到表`data`中,最后提交更改并关闭游标数据库连接。 对于PLC数据采集的实例,我需要更多的信息才能给出具体的建议。一般来说,您需要连接PLC并读取数据,然后将数据写入数据库中。如果您使用的是Modbus通信协议,可以使用Python库`pymodbus`来进行通信和数据读取。例如: ```python from pymodbus.client.sync import ModbusTcpClient # 连接PLC client = ModbusTcpClient('localhost', port=502) # 读取寄存器 result = client.read_holding_registers(0, 1) # 将数据写入数据库 # ... # 关闭连接 client.close() ``` 以上代码中,我们使用`ModbusTcpClient`连接到PLC,然后读取一个寄存器的值。最后,我们将读取到的数据写入数据库中。请注意,您需要根据您的PLC型和通信协议进行相应的修改。 希望这些信息对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长臂人猿

客官们众筹请博主喝杯奶茶吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值