在Scriptella中复制blob字段

时间:2013-01-28 08:48:46

标签: scriptella

我正在使用 Scriptella 进行数据库迁移。 将longblob字段从表A复制到表B的最佳方法是什么?

当我这样做这个工作时:

<query ...
  SELECT FL_DATA as data FROM A where FL_DATA IS NOT NULL
  <script ...>
    INSERT B (FL_DATA) VALUES ('$data');
  </script>
</query>

那么它只会将'BLOB:java.io.IOException:内容太长而无法放入内存'写入目标字段(顺便说一下:longblob的大小只有几KB)。

2 个答案:

答案 0 :(得分:0)

使用$ variable语法时,只需将变量的文本值插入到语句的文本中。建议的方法是使用预准备语句语法。在这种情况下,值将与SQL语句分开传输。请尝试以下方法:

<query ...
  SELECT FL_DATA as data FROM A where FL_DATA IS NOT NULL
  <script ...>
    INSERT B (FL_DATA) VALUES (?data);
  </script>
</query>

答案 1 :(得分:0)

对不起,这不是答案,但我不知道如何评论ejboy的答案。

Ejboy,它对我不起作用。我已经尝试过准备好的陈述(在我的情况下)?描述和?2。我尝试在控制台上显示内容时遇到的同样错误:

<query connection-id="database">
    SELECT id, description FROM table;
    <script connection-id="copy_database">
        INSERT INTO table VALUES (?1, ?2);
    </script>
    <script connection-id="text">
      $id, $description
    </script>
</query>

对于显示和插入(这里显示示例),我得到了相同的错误:

BRA0735401, CLOB: java.io.IOException: Content too long to fit in memory

我的主要任务是从一个数据库复制到另一个数据库。就像Jan的情况一样,blob / clob内容大约是40 kB(键/值列表,每个都在单独的行中,从数据库的角度来看这是MySQL MEDIUMTEXT)。我知道,可以插入一个blob / clob从一个文件(带有mp3文件的scriptella示例),并且可以将blob的内容写入文件(带有odbc和带有janino的图片的scriptella示例),所以我将尝试使用带有临时文件的解决方案,但它是不是一个美丽的解决方我是对的吗?

有没有更简单的解决方案?

此致 亚切克