百里登风

导航

webase编写智能合约,不借助Table工具类实现CRUD功能

webase平台在不借助Table通用工具类,编写智能合约,实现CRUD功能,支持该合约的所有数据的查询

pragma solidity ^0.4.25;
pragma experimental ABIEncoderV2;

contract SimpleCRUD{
    //定义结构体
    struct Data {
        uint256 id;
        string name;
        uint256 value;
        bool exists;
    }

    //存储所有数据的id
   uint256[] private dataIds;

    //使用mapping存放数据
    mapping(uint256 =>Data) private dataStore;

    //事件定义
    event DataAdded(uint256 id, string name, uint256 value);
    event DataUpdated(uint256 id, string name, uint256 value);
    event DataDeleted(uint256 id);
  
    // 添加数据
    function addData(uint256 _id, string memory _name, uint256 _value) public {
        require(!dataStore[_id].exists, "Data with this ID already exists");
        dataStore[_id] = Data(_id, _name, _value, true);
        dataIds.push(_id);
        emit DataAdded(_id, _name, _value);
    }

    //查询单条数据
    function getData(uint256 _id) public view returns(uint256,string memory,uint256){
        require(dataStore[_id].exists,"Data does not exist");
        Data memory data = dataStore[_id];
        return (data.id,data.name,data.value);
    }
    
      // 查询所有数据ID
    function getAllDataIds() public view returns (uint256[] memory) {
        return dataIds;
    }

    //查询所有数据
    function getAllData() public view returns(Data[] memory){
         Data[] memory allData = new Data[](dataIds.length);
         for(uint256 i=0;i<dataIds.length;i++){
          uint256 id = dataIds[i];
          allData[i] = dataStore[id];
         }
         return allData;
    }

    //更新数据
    function updataData(uint256 _id,string memory _name,uint256 _value)public{
        require(dataStore[_id].exists,"Data dose not exists");
        dataStore[_id].name=_name;
        dataStore[_id].value=_value;
        emit DataUpdated(_id,_name,_value);
    }
    
     // 删除数据
    function deleteData(uint256 _id) public {
        require(dataStore[_id].exists, "Data does not exist");
        delete dataStore[_id];
        
        // 从dataIds数组中移除ID
        uint256 length = dataIds.length;
        for (uint256 i = 0; i < dataIds.length; i++) {
            if (dataIds[i] == _id) {
                // 将最后一个元素移到当前位置
                if (length > 1 && i != length - 1) {
                    dataIds[i] = dataIds[length - 1];
                }
                // 删除最后一个元素
                dataIds.length--;  // 这是Solidity 0.6.0中缩短数组的方式
                break;
            }
        }
                emit DataDeleted(_id);
    }
}

 

posted on 2025-07-29 11:35  百里登峰  阅读(11)  评论(0)    收藏  举报