CRUD出现的问题和解决思路
前言
基于之前的部署,完成后开始编写自己代码,作为初学者遇到一些问题,就简单整理了一下。
1 0x16问题 Receipt message: PrecompiledError
CRUD对于表格是无法继续添加或者删除列的,当最开始建表为3时,如果中途修改表格,再添加表的列,键位增加。预编译是没有问题,但是调用函数后则会出现以下问题:
出现该原因是表名重复,无法对已经存在的表进行列的修改,需要重新设定表名,修改表名即可解决。
2 突然出现栈太深的问题
如上图所示,在查询的表列只有3时没有问题,列增加后就会出现该情况 Stack too deep, try removing local variables.
只需要如下,删除掉搜索条件即可,如果只有主键搜索,不输出主键,有其他condition则同样取消输出,具体代码如下:(原本是有注释中的内容,现在去掉后就好了)
function select(string memory name)
public
view
returns (string[] memory, string[] memory, string[] memory, string[] memory)
{
Table table = tableFactory.openTable(TABLE_NAME);
Condition condition = table.newCondition();
Entries entries = table.select(name, condition);
//string[] memory user_name_bytes_list = new string[](
// uint256(entries.size())
// );
string[] memory school_id_list = new string[](uint256(entries.size()));
string[] memory id_card_bytes_list = new string[](uint256(entries.size()));
string[] memory cre_id_bytes_list = new string[](uint256(entries.size()));
string[] memory hash_bytes_list = new string[](uint256(entries.size()));
for (int256 i = 0; i < entries.size(); ++i) {
Entry entry = entries.get(i);
//user_name_bytes_list[uint256(i)] = name;
school_id_list[uint256(i)] = entry.getString("school_id");
id_card_bytes_list[uint256(i)] = entry.getString("id_card");
cre_id_bytes_list[uint256(i)] = entry.getString("cre_id");
hash_bytes_list[uint256(i)] = entry.getString("hash");
}
return (school_id_list, id_card_bytes_list,cre_id_bytes_list,hash_bytes_list);
}
3 小结
目前初学主要遇到两个问题,之后可能会继续更新遇到的新错误。