当前位置: 首页 > 知识库问答 >
问题:

使用Google Apps Script从工作表向MySQL数据库插入Null值

薄龙光
2023-03-14

我目前正在使用谷歌应用程序脚本的数据摄取插件。其主要思想是,应用程序的用户可以将工作表中的数据插入到数据库中。为此,我使用应用程序脚本提供的JDBC api

我目前遇到的问题是,当我从工作表中读取一个空的单元格时,应用程序脚本使用了未定义的类型,因此在插入时产生了一个错误。我怎么能做这样的事?

我当前的插入函数:

function putData(row, tableName) {
  var connectionName = '****';
  var user = '****';
  var userPwd = '*****';
  var db = '******';

  var dbUrl = 'jdbc:google:mysql://' + connectionName + '/' + db;
  var conn = Jdbc.getCloudSqlConnection(dbUrl, user, userPwd);

  var stmt = conn.createStatement();
  var data = row
  var query = "INSERT INTO "+ db + '.' + tableName +" VALUES (" ;
  var i = 0

  //The following loop is just to build the query from the rows taken from the sheet
  // if the value is a String I add quotation marks
  for each (item in row){
    if ((typeof item) == 'string'){
      if (i == row.length-1){
        query += "'" + item + "'";
      } else {
        query += "'" + item + "',";
      } 
    }else {
      if (i == row.length-1){
        query += item;
      } else {
        query += item + ",";
      } 
    }
  i++
  }
  query += ")"
  results = stmt.executeUpdate(query)
  stmt.close();
  conn.close();
}

在某些情况下,当我尝试在中插入单词“NULL”时,我认为它是一个字符串,并在其他字段中显示错误。

共有1个答案

端木夕
2023-03-14

当试图从电子表格(更准确地说是从单元格)中获取数据时,该值将自动解析为以下类型之一:NumberBooleanDateString

根据Google getVales()留档:

根据单元格的值,值的类型可以是NumberBooleanDateString。空单元格由数组中的空字符串表示。

因此,本质上,未定义的类型可能是传递row参数的方式中存在的问题(例如,试图访问出界的单元格)。

如果要解决您的问题,您应该在每个(行中的项目)的后面添加If语句{行:

if (typeof item == 'undefined')
  item = null;

if语句检查内容的类型是否为undefined,如果是,它会自动将其解析为null。这样,内容的类型将为null,您应该能够将其插入数据库。

推荐的方法是使用JDBC编写的语句,它们基本上是预编译的SQL语句,这样可以更容易地插入必要的数据。更确切地说,您不必像在上面提供的代码中那样手动准备插入数据。它们也是更安全的方式,使您的数据不易受到各种攻击。

此外,在语句中的每个...的是不建议使用的,您应该考虑使用其他东西来代替,例如循环的循环。

此外,我建议您查看这些链接,因为它们可能会有所帮助:

>

  • 类Jdbc准备语句;

    类范围应用程序脚本-getValues()。

  •  类似资料:
    • 我尝试从本地磁盘(Windows 10)向我的RDS MySQL数据库插入一个blob。然而,我的查询没有插入blob。新行包含所有其他列,但blob为空。 以下是我尝试过的: 我设置了文件的读/写权限 安全文件设置为/tmp。。。我不知道这是什么意思。这是路径还是变量?如果它是一个变量,我已经尝试从用户/系统变量“TMP”的路径上传blob,但没有成功。我无法更改安全文件,因为RDS允许更改。。

    • 问题内容: 从Python脚本向MySQL插入一些数据时,出现一个奇怪的错误。这基本上与我要插入的变量为空有关。我认为MySQL不喜欢空白变量,但是还有其他我可以将其更改为可以与我的insert语句一起使用的东西吗? 我可以成功地使用一条语句将其设置为0(如果为空),但这可能会弄乱我计划稍后在MySQL中进行的某些数据分析。有没有办法将其转换为或某种方式,以便MySQL接受但不添加任何内容? 问题

    • 我正在尝试从HTML表单使用PHP向SQL数据库插入新记录。 我用Post方法制作了一个表单 带有提交按钮 我想做的是,当我按下按钮时,它将调用create.php,这是 然后将表单中的数据插入SQL数据库(表单中的id、名称、年份)。我在SQL语法中发现了一些错误。我犯了什么错误?

    • 问题内容: 我想创建一个存储过程,将数据从MSSQL DB表插入到我的MySQL DB表中,反之亦然。我需要做些什么? 我研究了两种解决方案。 创建一个链接服务器,使我可以使用MSSQL中的存储过程从MySQL写入和查询数据。 MySQL迁移工具包。这个选项似乎过大了,因为我只想在两者之间进行一些INSERTS和SELECTS 因此,我信任您,希望过去有人遇到过类似的问题,并且会很友好,为我提供最

    • 问题内容: 我使用Google Maps API制作了一个非常简单的页面,其中有几个字段,用户将在其中放置一些数据。看起来像- http://aiworker2.usask.ca/marker_field_db.html 我要做的是使用javascript / Ajax将数据存储到MySQL数据库中。我发现了几个使用Jquery的示例。我是这个javascript / Ajax / Jquery平