java - 如何使用 JDBC 中的 PreparedStatement 在表中存储长值?
问题描述
我有一个 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();
}
我收到以下错误:
[Teradata JDBC 驱动程序] [TeraJDBC 16.10.00.03] [错误 1339] [SQLState HY000] 执行 PreparedStatement 批处理请求时发生故障。参数集未执行,应使用 PreparedStatement executeUpdate 方法单独重新提交。
有什么想法吗?
我尝试按照您在下面的建议单独运行每个语句,但出现错误:[错误 2644] [SQLState HY000] 数据库中没有更多空间
解决方案
Teradata Database 错误 2644“数据库中没有更多空间”字面意思是数据库中没有更多空间。数据库中没有更多可用的永久空间。
要克服此错误,您可以增加数据库的永久空间,也可以从数据库中删除一些现有对象(例如表)。
推荐阅读
- python - 消息:selenium.common.exceptions.TimeoutException
- apache-kafka - 为什么 Kafka Streams 应用程序(Spring Cloud Stream)忽略了自定义 SerDe?
- database - 数据库未在 sqflite 中初始化 - 颤振
- sql - 提取两个字符之间的数字
- javascript - 使用 jquery 在 n 秒后阻止“显示然后隐藏”
- java - Java Thread 在 Windows 上工作,但在 Mac 上运行缓慢且出现故障
- flutter - Flutter Web:使用 Flutter Web 录制网络摄像头
- excel - Excel中VBA中的电源查询日期格式
- sql - 插入失败。3800:THEN/ELSE 表达式中的数据类型不匹配
- swift - GeometryReader 似乎改变了使用其大小数据的视图布局。我怎样才能避免这种情况?