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

如何在JDBC中使用PreparedStatement在表中存储长值?

苏建安
2023-03-14

我有一个teradata表:

 CREATE SET TABLE P_D.SAMPLE
 (
  ID DECIMAL(18,0),
  ISBN DECIMAL(18,0),
  TITLE varchar(100) null,
  POSITION INT
)

我想从Java批量插入:

 private static final String INSERT = "INSERT INTO P_D.SAMPLE (ID,ISBN,TITLE,POSITION) "
        + "VALUES (?,?,?,?)";

 public void insert(List<Book> books) {
  int booksCount = 0;
  int batch_size = 15000;

  PreparedStatement preparedStatement = connection.prepareStatement(INSERT);
            for (Book book : books) {
                preparedStatement.setLong(1, book.geId());
                preparedStatement.setLong(2,book.getIsbn());
                preparedStatement.setString(3, book.getTitle());
                preparedStatement.setInt(4, book.getPosition());
                preparedStatement.addBatch();

                if (++booksCount % batch_size == 0) {
                    preparedStatement.executeBatch();
                }
            }
            preparedStatement.executeBatch(); //inserting the remaining books
            preparedStatement.close();
 }

我得到以下错误:

有什么想法吗?

我尝试按您下面的建议分别运行每个语句,但出现错误:[error 2644][SQLState HY000]数据库中没有更多空间

共有1个答案

邓驰
2023-03-14

Teradata数据库错误2644“no more room in Database”字面意思是数据库中没有更多的空间了。数据库中没有更多的可用永久空间。

要越过这个错误,您可以增加数据库的perm空间,也可以从数据库中删除一些现有对象(如表)。

 类似资料:
  • 问题内容: 查询代码和查询: 返回一个空值。 通过基本调试,我发现了它的第三个绑定,即问题 我尝试了各种变体,其中最明智的似乎是在使用: 但这不起作用,因为我错过了连接字符串的任一侧,所以我尝试: 但我似乎无法找到一种方法使它们起作用。 我想念什么? 问题答案: 首先,占位符(那些占位符)仅用于 列值 ,而不用于表名,列名,SQL函数/子句等。最好改用。其次,你应该 不 引用占位符一样,它只会ma

  • 问题内容: 有人可以告诉我,以下JDBC代码中的第一个条件是否是针对两个不同的表执行两个不同的SQL查询? 问题答案: 在我的书中,我总是建议关闭已经打开的资源,以避免可能的泄漏。 一种更现代的方法是使用try-with- resources :

  • 问题内容: 为了使我们的代码更加标准,我们被要求更改将SQL变量硬编码为预处理语句的所有位置,然后绑定这些变量。 但是我遇到了问题。 这是代码: 我在执行SQL时收到此错误: 我应该改为使用? 问题答案: Using 使用 如果您的表的列类型为: 该方法接收到一个字符串,该字符串表示格式为日期的日期。例如: 假设您有一个type类型的变量,则可以这样进行转换: 当前的 如果要插入当前日期: Usi

  • 为了使我们的代码更加标准,我们被要求将所有我们将SQL变量硬编码为准备好的语句的地方改为绑定变量。

  • 问题内容: 由于某些奇怪的原因,我似乎无法将UTF-8数据添加到我的MySQL数据库中。输入非拉丁字符时,将其存储为?????。其他所有东西都存储良好。因此,例如,“ this is aexample®™”可以很好地存储,而“和英辞典”则存储为“ ????”。 连接网址很好: 正如您所料,我正在使用PreparedStatement,甚至有人尝试输入“ set names utf8”。 该表本身似

  • 问题内容: 我使用varchar(36)还是有更好的方法呢? 问题答案: 当我问到为对象存储GUID的最佳方法时,我的DBA问我为什么当我可以用Integer以4字节进行相同的操作时为什么需要存储16字节。自从他向我提出挑战以来,我认为现在是提起挑战的好时机。话虽如此… 如果要最大程度地利用存储空间,可以将GUId存储为CHAR(16)二进制文件。