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

索引超出范围:JDBC SqlServer异常

蒋培
2023-03-14

我使用Sqoop将数据从SQL server导入到本地HDF。我使用一个简单的自由形式查询从表中提取大约10行。下面是我从终端执行的sqoop命令:

sqoop import --connect 'jdbc:sqlserver://xx.xx.xx.xx;username=xx;password=xxxxx;database=DBName' --query "SELECT top 10 OrderID from DJShopcart_OrderItems where \$CONDITIONS"  --split-by "OrderID" --target-dir  /work/gearpurchase

当我从本地计算机执行此操作时,会出现以下异常:

原因:com。微软sqlserver。jdbc。SQLServerException:索引2超出范围。在com。微软sqlserver。jdbc。SQLServerException。在com上生成fromDriverError(SQLServerException.java:191)。微软sqlserver。jdbc。SQLServerResultSet。在com上验证ValidColumnIndex(SQLServerResultSet.java:543)。微软sqlserver。jdbc。SQLServerResultSet。com上的getterGetColumn(SQLServerResultSet.java:2066)。微软sqlserver。jdbc。SQLServerResultSet。com上的getValue(SQLServerResultSet.java:2099)。微软sqlserver。jdbc。SQLServerResultSet。com上的getValue(SQLServerResultSet.java:2084)。微软sqlserver。jdbc。SQLServerResultSet。位于org的getInt(SQLServerResultSet.java:2327)。阿帕奇。sqoop。lib。JdbcWritableBridge。com上的readInteger(JdbcWritableBridge.java:52)。cloudera公司。sqoop。lib。JdbcWritableBridge。位于QueryResult的readInteger(JdbcWritableBridge.java:53)。org上的readFields(QueryResult.java:105)。阿帕奇。sqoop。mapreduce。数据库。DBRecordReader。nextKeyValue(DBRecordReader.java:244)

如果我导入了两列,异常会显示索引3超出范围。

我还查看了SQLServerResultSet类文档,以了解导致异常但没有用的原因。只是对客户端游标和服务器端游标这样的概念更加困惑

无论我尝试什么,我都无法得到这个简单的自由形式查询来从SQL服务器导入数据。

Sqoop version : 1.4.6 
Hadoop : 2.7.3
Machine : Ubuntu 16.04

请帮帮我。提前谢谢。

共有1个答案

訾稳
2023-03-14

如果我导入了两列,异常会显示索引3超出范围。

那么问题就出在SQOOP上了。

at org.apache.sqoop.lib.JdbcWritableBridge.readInteger(JdbcWritableBridge.java:52)

将3作为参数传递给

at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getInt(SQLServerResultSet.java:2327)

当结果仅包含2列,且有效列索引为1和2时。

 类似资料:
  • 问题内容: 因此,我正在编写一个简单的程序来输入字符串并计算总数。的米 所以,这是我的代码 where 和str是我接受过的字符串,但是此错误不断出现 这是什么错误以及如何将其删除? 问题答案: 字符串,有效索引从0到n-1; 更改 至

  • 问题内容: 每当我运行xhtml时。它给了我以下例外。statusindex对象的值为5。我正在使用JQuery进行延迟滚动,因此当我的xhml页面getMoreStatusList调用getMoreStatusList函数时,它为我提供了超出范围的异常的索引。数据库中有26个状态更新,因此索引超出范围的异常对我来说毫无意义。 1)代码 2)例外 问题答案: 消息说是30。这不是您认为的5,而是2

  • 问题内容: 从类中调用函数时出现以下错误:java.lang.StringIndexOutOfBoundsException:超出范围的字符串索引:-1尽管我使用系统打印来查看输入的内容,但仍在substring()函数中进行传递似乎是正确的。函数isContained()返回一个布尔值,该值定义作为参数传递的子字符串是否在单词列表中。我的代码是: 其中size是我在函数中传递的字符串(str)的

  • 问题内容: 我写了这个小函数只是为了练习,但是抛出了一个异常(“字符串索引超出范围:29”),我不知道为什么… (我知道这不是编写此函数的最佳方法,可以使用正则表达式。) 这是代码: 问题答案: 您是否正在从其他语言翻译此代码?您要遍历字符串,直到到达空字符(),但Java通常不会在字符串中使用这些字符。在C语言中,这可以工作,但是在您的情况下,您应该尝试 代替 此外, 如果您期望的是,在代码末尾

  • 问题内容: 我编写了这段代码,将整个以10为底的数字转换为二进制。我相信代码就是它所需要的一切,但是我无法让ArrayLists正常工作。我已经在这个网站上花了几个小时,而其他人则尝试了无数次更改,但无济于事。我已经获得了可以在没有和错误的情况下进行编译的代码,但是一旦输入int程序就会崩溃。 这是代码: 这些是我输入数字时Java抛出的异常。 我希望这是足够的信息。 问题答案: 在您的代码中,您

  • 问题内容: 我已经开始处理我的第一个Java程序,它是一个简单的计算器,但是我得到一个错误,声称我的数组超出范围。我尝试对其进行调试,以了解这样做的原因和原因,并遵循纸上的代码,两者均显示了我期望和期望的结果。因此,我看不到问题出在哪里。代码不完整。 根据调试器,此行出现错误: 这是我当前拥有的代码的主要部分: 这是我收到的错误消息: 问题答案: 当等于中的最后一个元素索引时,则将大于最后一个元素