如果数据库中存在表,则返回视图

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创建表之前判断表是不是存在,如果存在则删除已有表

查找表或视图的依赖对象

oracle创建表之前判断表是不是存在,如果存在则删除已有表

使用 sqitch 中的 mysql 查询验证表不存在