• 技术文章 >数据库 >PostgreSQL

    kettle postgresql 乱码怎么解决

    爱喝马黛茶的安东尼爱喝马黛茶的安东尼2019-12-25 14:41:41原创2447

    kettle使用文件导入到Postgresql出现如下几种问题的总结:

    第一种错误,报错如ERROR: extra data after last expected column所示。或者报错为报错为0x05,多一列,extra data after last expected column。

    sql查询语句定位到某个字段:

    SELECT * ),'%')

    解决方法,使用空替代,原因是出现特殊字符,),这种字符,导致的错误。

    解决方法如下所示:

     public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {
         Object[] r = getRow();
     
         if (r == null) {
         setOutputDone();
         return false;
         }
     
         // It is always safest to call createOutputRow() to ensure that your output row’s Object[] 
         is large
         // enough to handle any new fields you are creating in this step.
         r = createOutputRow(r, data.outputRowMeta.size());
     
         String 字段名称 = get(Fields.In, "字段名称").getString(r);
         if(字段名称 != null) {
             字段名称 = 字段名称.replaceAll(( + "", "");
         }
         get(Fields.Out, "字段名称").setValue(r, 字段名称);
     
         // Send the row on to the next step.
         putRow(data.outputRowMeta, r);
     
         return true;
     }

    第二种错误,报错如missing data for column "datastamp"。

    sql查询语句定位到某个字段:

    SELECT * ),'%')

    或者

    SELECT * ),'%')

    解决方法:是字段的值出现了,换行回车,),)。)多一行,少n列,missing data column xxx。解决方法:使用字符替代,然后再替换回来。

    解决方法如下所示:

     public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {
         Object[] r = getRow();
     
         if (r == null) {
         setOutputDone();
         return false;
         }
     
         // It is always safest to call createOutputRow() to ensure that your output row’s Object[] 
         is large
         // enough to handle any new fields you are creating in this step.
         r = createOutputRow(r, data.outputRowMeta.size());
     
         String 字段名称 = get(Fields.In, "字段名称").getString(r);
         if(字段名称 != null) {
             字段名称 = 字段名称.replaceAll("\\r", "@#r;");
             字段名称 = 字段名称.replaceAll("\\n", "@#n;");
         }
         get(Fields.Out, "字段名称").setValue(r, 字段名称);    
     
         // Send the row on to the next step.
         putRow(data.outputRowMeta, r);
     
         return true;
     }

    第三种错误,报错如,0x00的解决方法:

    sql查询语句定位到某个字段:

    SELECT * ),'%')

    解决方法:

     public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {
         Object[] r = getRow();
     
         if (r == null) {
         setOutputDone();
         return false;
         }
     
         // It is always safest to call createOutputRow() to ensure that your output row’s Object[] 
         is large
         // enough to handle any new fields you are creating in this step.
         r = createOutputRow(r, data.outputRowMeta.size());
     
         // Get the value from an input field
         String 字段名称 = get(Fields.In, "字段名称").getString(r);
     
         if(字段名称 != null) {
             字段名称= 字段名称.replaceAll("\\u0000", "");
         }
     
         get(Fields.Out, "字段名称").setValue(r, 字段名称);
     
         // Send the row on to the next step.
         putRow(data.outputRowMeta, r);
     
         return true;
     }

    Python学习网,大量的免费PostgreSQL入门教程,欢迎在线学习!

    专题推荐:kettle postgresql 乱码
    品易云
    上一篇:postgresql 创建表的几种方式 下一篇:postgresql有rowid吗

    相关文章推荐

    • postgresql 认证失败怎么解决• postgresql无法远程连接怎么解决

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网