我正在尝试使用以下Fastload API
连接等等是完美的.
我确切地知道它失败了
...........
System.out.println(" Streaming " + dataFile);
pstmtFld.setAsciiStream(1, dataStream, -1); // This line fails
System.out.println("check the above line"); // This does not go to console
...........
Run Code Online (Sandbox Code Playgroud)
例外是
Exception in thread "main" java.lang.IllegalStateException: Sample failed.
[ODBC Teradata Driver] Invalid precision: cbColDef value out of range
这是我要上传的表格.这是一种.csv格式,当我通过记事本打开它时,它看起来像这样
1,9,Win
2,9,Winc
3,9,Wi
Run Code Online (Sandbox Code Playgroud)
为什么我会得到这个例外?我怎样才能改进它?据我所知,问题是pstmtFld.setAsciiStream(1, dataStream, -1);不能以某种方式接受数据集并抛出异常
我在代码中抛出了一堆自定义运行时异常,并且我想确保在所有公共方法中,我记录可能会(我自己)抛出哪个运行时异常以及原因。因为我要维护一个库,该库可供许多项目使用,并且我希望它对于抛出的(运行时)异常是预先的和可预测的,所以这将是非常高兴的。
是否有编译器选项,Maven插件,Intellij插件或自定义工具可以帮助我找到缺失的throws子句?随着检查的异常很容易,编译器将只是抱怨,如果我错过了一个,但是对于运行时异常都throws与@throws不执行。
我想到的一件事是暂时使我自己所有的运行时异常都经过检查的异常(它们已经共享了一个超类),但这将是一次性的练习。每次进行更改时,我都想验证我的代码/文档,因此我永远不会忘记记录我的运行时异常。
另一种方法是实际检查整个代码中的异常,然后仅在公共api中将它们转换为运行时:
class Foo {
// oops, throws not documented with @throws
public void publicMethod() {
try {
privateMethod1();
} catch (CheckedFooException e) {
throw new RuntimeFooException(e);
}
}
private void privateMethod1() throws CheckedFooException {
privateMethod2();
}
private void privateMethod2() throws CheckedFooException {
throw new CheckedFooException();
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法将迫使我在所有公共方法中考虑CheckedFooException。然后要检查是否错过了一个文档(即@throws RuntimeFooException),只需对它进行正则表达式搜索catch.*CheckedFooException并检查缺少的@throws条目。但是,这个过程相当繁琐(而且很多公共api都可以使用try ... catch语句)。
答:关于是否应该记录(您自己抛出的)运行时异常(到目前为止的总结:取决于情况),存在一些讨论,但是就我的问题的直接答案而言,已接受的答案可以充分回答它。我可以采取这种方法,实施我的用例,甚至花一些时间和精力来用它制作一个maven插件。我为此上传了一个清理启动项目。
我有一个域模型类,该类具有toString实现,如下所示:
public String toString() {
try {
return getX() + "\n"
getY() + "\n"
getZ(); //etc.
} catch(Exception e) {
throw new RuntimeException(e);
}
}
Run Code Online (Sandbox Code Playgroud)
的方法getX(),getY()和getZ()不是简单的吸气剂,它们可以在后台预定义的键-值对的静态地图执行查找,通常查找。他们throws SomeCheckedException中有些人签名。
我的印象是,这是不好的做法,并且有“代码异味”。toString()甚至需要进行此检查的事实对我来说都是不良设计的征兆。但我的一位同事,究竟是错捕的一般要求Exception在toString(),因为抓住了Exception进一步传播。
我认为它至少违反了KISS原则,因为这样的简单方法toString()表示需要特殊的异常处理。
那么在toString()中包含一个包罗万象的块是否有代码味道?
我发现的答案是针对捕获通用的一般情况,Exception而我大多数人都同意,如果您正在执行通用错误处理机制或批处理,那么它有望适用于通用异常。这个论点在我们的讨论中没有说服力,所以我很好奇其他观点。