首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为setAsciiStream方法提供正确的参数?

如何为setAsciiStream方法提供正确的参数?
EN

Stack Overflow用户
提问于 2013-11-24 00:25:24
回答 2查看 434关注 0票数 1

这是我的完整测试代码,主要方法如下:

代码语言:javascript
复制
public class TestSetAscii {

    public static void main(String[] args) throws SQLException, FileNotFoundException {
        String dataFile = "FastLoad1.csv";
        String insertTable = "INSERT INTO " + "myTableName" + " VALUES(?,?,?)";
        Connection conStd = DriverManager.getConnection("jdbc:xxxxx", "xxxxxx", "xxxxx");
        InputStream dataStream = new FileInputStream(new File(dataFile));
        PreparedStatement pstmtFld  = conStd.prepareStatement(insertTable);
            // Until this line everything is awesome

        pstmtFld.setAsciiStream(1, dataStream, -1); // This line fails
        System.out.println("works");
    }
}

我得到了"cbColDef值超出范围“错误。

代码语言:javascript
复制
Exception in thread "main" java.sql.SQLException: [Teradata][ODBC Teradata Driver] Invalid precision: cbColDef value out of range
    at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbc.SQLBindInParameterAtExec(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcPreparedStatement.setStream(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcPreparedStatement.setAsciiStream(Unknown Source)
    at file.TestSetAscii.main(TestSetAscii.java:21)

这是指向我的FastLoad1.csv文件的链接。我想setAsciiStream失败是因为FastLoad1.csv文件,但我不确定

(在我以前的https://stackoverflow.com/questions/20169127/what-is-illegalstateexception?noredirect=1#comment30067341_20169127中,我无法缩小我所遇到的问题。现在我缩短了代码。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-24 00:32:41

它将依赖于表模式,但是setAsciiStream的第三个参数是length。所以

代码语言:javascript
复制
pstmtFld.setAsciiStream(1, dataStream, 4);  

将适用于长度为4字节的字段。

但我认为它不会像你在代码中所期望的那样起作用。对于每个绑定,您应该有单独的流。

此函数setAsciiStream()设计用于大数据值BLOBS或长VARCHARS。它不适合逐行读取csv文件,并将它们拆分为单独的值。

基本上,它只是将其中一个问号与inputStream绑定在一起。

在查看了所提供的示例之后,看起来teradata可以处理csv,但是您必须使用以下方法显式地告诉它:

代码语言:javascript
复制
String urlFld = "jdbc:teradata://whomooz/TMODE=ANSI,CHARSET=UTF8,TYPE=FASTLOADCSV";  
票数 2
EN

Stack Overflow用户

发布于 2014-04-11 20:38:09

我没有足够的声誉来评论,但我觉得这个信息对于那些第一次通过JDBC导航快速加载的人来说是很有价值的。

这段代码将得到完整的堆栈跟踪,对于诊断快速加载的问题非常有帮助:

代码语言:javascript
复制
catch (SQLException ex){
    for ( ; ex != null ; ex = ex.getNextException ())
        ex.printStackTrace () ;
}

在上面的代码中,如果您在连接字符串中指定了TYPE=FASTLOADCSV,但是当多次运行由于创建了错误表_ERR_1和_ERR_2而失败时,它就会工作。删除这些表并清除目标表以再次运行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20169650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档