如果数据库中存在表,则返回视图
Posted
技术标签:
【中文标题】如果数据库中存在表,则返回视图【英文标题】:Return View if table exists in database 【发布时间】:2021-08-04 20:11:01 【问题描述】:我正在 React Native(expo) 中创建一个应用程序。 用户第一次使用该应用时会出现选择自己想要的语言,当他选择一个时,他下次进入该应用时将不再出现。
这是我的代码:
db.transaction(function (tx)
//comando SQL modificável
tx.executeSql(
"SELECT language FROM settings",
[],
(tx, results) =>
console.log("Results: " + results.rows.length)
if(results.rows.length == 0)
console.log("Não tem nenhuma row")
else
console.log("tem uma row")
,
//-----------------------
);
);
如何在第一个 if() 中返回一个 View 并在 else 中返回另一个。 请记住,如果我在 db.transaction 中返回某些内容,我将收到一个错误,即渲染没有返回任何内容。
【问题讨论】:
【参考方案1】:我相信 db.transaction 是异步的,因此您可能需要利用 promise/delayed-return 技术从该代码块中返回一个视图。
这是一个想法。创建一个注入到组件视图中的占位符状态变量...然后在 sql 异步返回时将其内容操作为您想要的任何内容。
最初 jsx 变量将为 null 并且基本上不存在.. 但在 promise 返回后,它将是您想要的任何 Jsx(视图、文本等)。
您可以通过多种方式对视图进行切片和切块,但这是基本方法。我只是使用 Text 来保持简单...
function someComponent(props)
let [ viewJsx, setViewJsx] = React.useState(null);
db.transaction(function (tx)
//comando SQL modificável
tx.executeSql(
"SELECT language FROM settings",
[],
(tx, results) =>
console.log("Results: " + results.rows.length)
if(results.rows.length == 0)
console.log("Não tem nenhuma row")
setViewJsx(<Text>No row found</Text>);
else
console.log("tem uma row")
setViewJsx(<Text>Found a row</Text>);
,
//-----------------------
);
return (
<View>
<Text>This is my component. The next element will not show up until sqlLite promise transaction is complete..</Text>
viewJsx
</View>
);
【讨论】:
以上是关于如果数据库中存在表,则返回视图的主要内容,如果未能解决你的问题,请参考以下文章
返回第一个表中的所有数据,如果存在,则返回第二个表中的 1 个数据
oracle创建表之前判断表是不是存在,如果存在则删除已有表