posts - 119, comments - 62, trackbacks - 0, articles - 0
          當我們用下面的通用代碼插入一個點到空間表中時,會報SPECIFIED ATTRIBUTE COLUMN DOESN'T EXIST錯誤,錯誤信息如下:
          ArcSDE Error Number        : -38
           Error Description          : SPECIFIED ATTRIBUTE COLUMN DOESN'T EXIST.
          com.esri.sde.sdk.client.SeException:
           at com.esri.sde.sdk.client.j.a(Unknown Source)
           at com.esri.sde.sdk.client.j.a (Unknown Source)
           at com.esri.sde.sdk.client.SeInsert.intoTable(Unknown Source)
           at com.suzhou.service.sde.SDEOperation.addPointObject(SDEOperation.java:59)
           at com.suzhou.struts.action.AdminCheckNewObjAction.execute (AdminCheckNewObjAction.java:143)
           at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106)
           at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java :419)
           at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
           at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
           at org.apache.struts.action.ActionServlet.doGet ( ActionServlet.java:414)
           at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
           at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
           at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:237)
           at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
           at com.suzhou.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java :24)
           at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
           at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
           at org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:214)
           at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
           at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
           at org.apache.catalina.core.StandardContextValve.invokeInternal (StandardContextValve.java:198)
           at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
           at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
           at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
           at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
           at org.apache.catalina.core.StandardValveContext.invokeNext (StandardValveContext.java:104)
           at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
           at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
           at org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:520)
           at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
           at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
           at org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:520)
           at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
           at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
           at org.apache.coyote.http11.Http11Processor.process (Http11Processor.java:799)
           at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
           at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
           at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
           at java.lang.Thread.run(Thread.java:619)
          插入點的java代碼如下:

          String server = "menglikunm";

           int instance = 5151;

           String database = "ora";

           String user = "suzhou";

           String password = "suzhou";

           public Long addPointObject(long x, long y, String tabname) throws Exception {
            SeLayer insertLayer = null;
            SeConnection conn = null;
            Long intsertRowID = null;
            try {
             conn = new SeConnection(server, instance, database, user, password);
             Vector layerList = conn.getLayers();
             for (int index = 0; index < layerList.size(); index++) {
              SeLayer layer = (SeLayer) layerList.elementAt(index);
              System.out.println(layer.getName());
              if ( layer.getName().equalsIgnoreCase(tabname)) {
               insertLayer = layer;
               break;
              }
             }
            } catch (SeException e) {
             // e.printStackTrace();
             throw e;
            }
            // 開始插入數(shù)據(jù)
            if (insertLayer == null) {
             throw new Exception("找不到空間表:" + tabname);
            }
            try {
             conn.startTransaction();
             String[] cols = new String[1];
             //cols[0] = insertLayer.getSpatialColumn();
             cols[0]="SHAPE";
             System.out.println(cols[0]);
             SeInsert insert = new SeInsert(conn);
             System.out.println(insertLayer.getName());
             insert.intoTable(insertLayer.getName(), cols);//運行到這里時出現(xiàn)錯誤!
             insert.setWriteMode(true);
             SeCoordinateReference coordref = (SeCoordinateReference) insertLayer
               .getCoordRef();
             SeShape shape = new SeShape(coordref);

             int numPts = 1;
             SDEPoint[] ptArray = new SDEPoint[numPts];
             ptArray[0] = new SDEPoint(x, y);
             shape.generatePoint(numPts, ptArray);
             SeRow row = insert.getRowToSet();
             row.setShape(0, shape);
             insert.execute();
             intsertRowID = new Long(insert.lastInsertedRowId().longValue());
             insert.close();
             conn.commitTransaction();
             conn.close();
            } catch (Exception ex) {
             ex.printStackTrace ();
             try {
              conn.rollbackTransaction();
              conn.close();
             } catch (Exception ex2) {
             }
             throw ex;
            }
            return intsertRowID;
           }

          之所以出現(xiàn)這個錯誤,是因為當插入一個點到空間表中時,arcsde自動生成一個OBJECTID值,但如果你的空間表導(dǎo)到SDE的時候表中已經(jīng)有了OBJECTID字段,SDE自動生成的是OBJECTID_1字段作為每條記錄的ID字段,如果你把OBJECTID_1字段人為的刪除,那么這時候arcSDE就找不到該字段了,就會報出SPECIFIED ATTRIBUTE COLUMN DOESN'T EXIST.的錯誤,解決辦法是重新導(dǎo)一下該空間表,且導(dǎo)入的時候不能有命名為OBJECTID的字段。

          很多時候,這些問題都要你自己來發(fā)現(xiàn)和解決,不能太相信ESRI的技術(shù)支持,他們大部分時候都不能給你什么幫助:)

          Feedback

          # re: arcSDE插入空間數(shù)據(jù)時出現(xiàn)錯誤SPECIFIED ATTRIBUTE COLUMN DOESN'T EXIST的原因和解決辦法  回復(fù)  更多評論   

          2007-12-24 14:27 by QQ:316986457
          謝謝你的"很多時候,這些問題都要你自己來發(fā)現(xiàn)和解決,不能太相信ESRI的技術(shù)支持,他們大部分時候都不能給你什么幫助:)",記下了,正在查找一個類似問題的原因,看到了您的文章,幫助很大,交個朋友好嗎?我的QQ:316986457

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 遂溪县| 伊宁市| 子长县| 成武县| 大渡口区| 定边县| 乐亭县| 河北区| 金堂县| 延安市| 桂东县| 湘潭市| 呼图壁县| 温泉县| 平度市| 司法| 韶山市| 临城县| 綦江县| 尉犁县| 镇赉县| 闽清县| 元氏县| 如皋市| 鹿邑县| 马山县| 屏东市| 维西| 高平市| 包头市| 黑山县| 沁源县| 明光市| 溧阳市| 香河县| 融水| 团风县| 原阳县| 通榆县| 娱乐| 班戈县|