3

我正在尝试使用谷歌应用程序脚本来检索电子邮件附件,下面是我的代码来检查电子邮件中是否有任何附件

function testMail() {
var threads = GmailApp.getInboxThreads();
for (var i = 0; i < 10; i++) {
  var mess=threads[i].getMessages()[0];
  if (mess.getAttachments().length>0)
  {
    //var filename=mess.getAttachments()[0].
    Logger.log(mess.getSubject());
    Logger.log(mess.getAttachments()[0].getName());
    var conn = Jdbc.getConnection("jdbc:oracle:thin:@xxx.xxx.xxx.xxx/xxx.xxx.xxx", "xxx","xxxxxxx");
    conn.setAutoCommit(false);
    var stmt = conn.prepareStatement("insert into blob_table (filnname,blob_field) values (?,?)");
    stmt.setString(1, mess.getAttachments()[0].getName());

    stmt.setBlob(2, mess.getAttachments()[0]);
    var res = stmt.execute();
    conn.commit();
    conn.close();    

    break;
  }  
}
}

但是当我运行脚本时出现错误“找不到方法setBlob提示”,如果我只插入字段文件名,我可以将数据保存到表blob_table,有没有什么特殊的方法可以插入blob?

谢谢

4

2 回答 2

0

如果您查看自动完成或文档,您会发现 JDBC 与 Apps 脚本的其余部分不同,它有自己的 JdbcBlob 概念,与 Blob 不同。(每个 JdbcBlob 都是 Blob,但反之则不然。)您可以像这样将常规 Blob 转换为 JDBC Blob:

conn.createBlob().setBytes(0, myOriginalBlob)

在这种情况下myOriginalBlob,你从哪里得到什么mess.getAttachments()[0])

于 2012-10-07T16:45:54.240 回答
0

jdbcBlob 和 Blob 是两个不同的东西。在行stmt.setBlob(2, xxxx);

xxxx 是一个 jdbcBlob。如果您有 Blob,则需要在保存到 DB 之前将其转换为 jdbcBlob。

var jdbcBlob = conn.createBlob();
jdbcBlob.setBytes(1, blob);

在您的示例中,正确的方法是

var jdbcBlob = conn.createBlob();
jdbcBlob.setBytes(1, mess.getAttachments()[0]);
stmt.setBlob(2, jdbcBlob);
于 2018-06-30T06:38:21.197 回答