2015-04-06 143 views
0

所以我试图做一个简单的测试,我的Vaadin程序将简单地连接到MS SQL Server数据库并检索一些数据。没什么大不了。除了Vaadin想要做一件大事。不明原因的Vaadin错误

我不知道发生了什么事,但我现在在一个点上我。不管什么样的变化我要对我的VaadinConnManager类,我得到完全相同的的错误信息(“附近有语法错误‘限制’” )在完全相同的行号,即使该行号没有任何内容。这就像程序是卡住在一个特定的修订版,并不会接受任何其他更改。

我认为这至少部分与我在Eclipse中遇到的奇怪错误有关。这里是什么样子:

Very odd error icons

我已经盘旋了两个图标,是相关的。通常,“红色X”图标表示程序中存在错误,通常位于.java源文件之一中。但正如你所看到的,我的任何源文件都没有这样的错误。 “Java Resources”文件夹中似乎还有一个剪辑感叹号。我认为小地球图标只是隐藏了它的上半部分,这就是它看起来像一个红色沙漏的原因。而不是红色的感叹号。 Eclipse不能告诉我这些错误是什么。或者,至少,我无法弄清楚。无可否认,我仍然在学习Eclipse,所以完全有可能我只是不知道在哪里寻找解释这些红色标记。谁能帮帮我吗?

编辑(2015年4月8日):我从两个.java文件在屏幕截图是有关上述,以及错误的堆栈跟踪粘贴我的代码。

VaadinsqltestUI.java:

package info.chrismcgee.sky.vaadinsqltest; 

import java.sql.SQLException; 

import info.chrismcgee.sky.vaadinsqltest.dbutil.ConnectionManager; 
import info.chrismcgee.sky.vaadinsqltest.dbutil.VaadinConnManager; 

import javax.servlet.annotation.WebServlet; 

import com.vaadin.annotations.Theme; 
import com.vaadin.annotations.VaadinServletConfiguration; 
import com.vaadin.data.util.sqlcontainer.SQLContainer; 
import com.vaadin.server.VaadinRequest; 
import com.vaadin.server.VaadinServlet; 
import com.vaadin.ui.Button; 
import com.vaadin.ui.Button.ClickEvent; 
import com.vaadin.ui.Label; 
import com.vaadin.ui.UI; 
import com.vaadin.ui.VerticalLayout; 

@SuppressWarnings("serial") 
@Theme("vaadinsqltest") 
public class VaadinsqltestUI extends UI { 

    @WebServlet(value = "/*", asyncSupported = true) 
    @VaadinServletConfiguration(productionMode = false, ui = VaadinsqltestUI.class) 
    public static class Servlet extends VaadinServlet { 
    } 

    @Override 
    protected void init(VaadinRequest request) { 
     final VerticalLayout layout = new VerticalLayout(); 
     layout.setMargin(true); 
     setContent(layout); 

     Button button = new Button("Click Me"); 
     button.addClickListener(new Button.ClickListener() { 
      public void buttonClick(ClickEvent event) { 
//    try { 
//     ConnectionManager connMan = new ConnectionManager(); 
        SQLContainer container = VaadinConnManager.getJobs(); 
/*    } catch (SQLException | ClassNotFoundException e) { 
        e.printStackTrace(); 
       }*/ 
       layout.addComponent(new Label("Thank you for clicking")); 
      } 
     }); 
     layout.addComponent(button); 
    } 

} 

VaadinConnManager.java:

package info.chrismcgee.sky.vaadinsqltest.dbutil; 

import java.sql.SQLException; 
import java.util.logging.Logger; 

import com.vaadin.data.util.sqlcontainer.SQLContainer; 
import com.vaadin.data.util.sqlcontainer.connection.JDBCConnectionPool; 
import com.vaadin.data.util.sqlcontainer.connection.SimpleJDBCConnectionPool; 
import com.vaadin.data.util.sqlcontainer.query.FreeformQuery; 
import com.vaadin.data.util.sqlcontainer.query.TableQuery; 
import com.vaadin.data.util.sqlcontainer.query.generator.MSSQLGenerator; 

public class VaadinConnManager { 

    Logger logger = Logger.getLogger(VaadinConnManager.class.getName()); 

    private static final String USERNAME = "web"; 
    private static final String PASSWORD = "web"; 
    private static final String CONN_STRING = "jdbc:sqlserver://192.168.0.248;databaseName=job_orders_2014"; 

    public VaadinConnManager() { 
     } 

    public static SQLContainer getJobs() { 

     JDBCConnectionPool pool = null; 
//  SQLContainer container; 

     try { 
      pool = new SimpleJDBCConnectionPool("com.microsoft.sqlserver.jdbc.SQLServerDriver", CONN_STRING, USERNAME, PASSWORD, 2, 5); 
      System.out.println("Connected!"); 
     } catch (SQLException e) { 
      System.err.println(e); 
     } 
/* 
//  MSSQLGenerator generator = new MSSQLGenerator(); 
//  TableQuery tq = new TableQuery("Job", pool, generator); 
//  tq.setVersionColumn("proof_spec_date"); 

//  FreeformQuery query = new FreeformQuery("SELECT * FROM Job AS j JOIN OrderDetail AS o ON j.job_id = o.order_id", pool, "job_id"); 
     FreeformQuery query = new FreeformQuery("SELECT * FROM Job", pool, "job_id"); 

     try { 
      container = new SQLContainer(query); 
      return container; 
     } catch (SQLException e) { 
      System.err.println(e); 
     }*/ 

     return null; 
    } 

} 

堆栈跟踪:

Apr 08, 2015 3:14:01 PM org.atmosphere.cpr.AtmosphereFramework info 
INFO: Atmosphere is using async support: org.atmosphere.container.JSR356AsyncSupport running under container: Apache Tomcat/8.0.18 using javax.servlet/3.0 and jsr356/WebSocket API 
Apr 08, 2015 3:14:01 PM org.atmosphere.cpr.AtmosphereFramework info 
INFO: Atmosphere Framework 2.2.4.vaadin5 started. 
Apr 08, 2015 3:14:01 PM org.atmosphere.cpr.AtmosphereFramework interceptor 
INFO: Installed AtmosphereInterceptor Track Message Size Interceptor using | with priority BEFORE_DEFAULT 
Connected! 
Apr 08, 2015 3:14:06 PM com.vaadin.data.util.sqlcontainer.SQLContainer getPropertyIds 
WARNING: Failed to fetch property ids, rolling back 
com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near 'LIMIT'. 
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1515) 
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:404) 
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:350) 
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696) 
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:180) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:155) 
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:285) 
    at com.vaadin.data.util.sqlcontainer.query.TableQuery.executeQuery(TableQuery.java:529) 
    at com.vaadin.data.util.sqlcontainer.query.TableQuery.getResults(TableQuery.java:252) 
    at com.vaadin.data.util.sqlcontainer.SQLContainer.getPropertyIds(SQLContainer.java:1194) 
    at com.vaadin.data.util.sqlcontainer.SQLContainer.<init>(SQLContainer.java:134) 
    at info.chrismcgee.sky.vaadinsqltest.dbutil.VaadinConnManager.getJobs(VaadinConnManager.java:38) 
    at info.chrismcgee.sky.vaadinsqltest.VaadinsqltestUI$1.buttonClick(VaadinsqltestUI.java:41) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:508) 
    at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:198) 
    at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:161) 
    at com.vaadin.server.AbstractClientConnector.fireEvent(AbstractClientConnector.java:977) 
    at com.vaadin.ui.Button.fireClick(Button.java:393) 
    at com.vaadin.ui.Button$1.click(Button.java:61) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:168) 
    at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:118) 
    at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:291) 
    at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:184) 
    at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:92) 
    at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:41) 
    at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1408) 
    at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:350) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1086) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:659) 
    at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1558) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1515) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 

com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near 'LIMIT'. 

第9行显示“property id”警告,并且以下行本身是异常。再往下,在第24行,你会看到我的班级发生错误。请注意行号:38.如果您在上面的源代码中看到,第38行包含注释行。如果我添加更多的空行或移动一些东西,错误留在行号38上。

回答

0

尝试在Derby数据库中打开表时,我有类似的错误消息。 我的问题(SQLException)的原因是Derby不理解SQL语句

SELECT * FROM ....LIMIT 20,40;

其中Vaadin需要用于其有效的寻呼/迟缓装载只获取用数字20〜40行(在此实例中)示出的行的下一个页面时在网格经由 com.vaadin.data .util.sqlcontainer.query.TableQuery

中的限制条件内

com.vaadin.data.util.sqlcontainer.query.generator.DefaultSQLGenerator.generateLimits(StringBuffer, int, int) 

产生其实Vaadin有MS-SQL服务器的专用类 - 所以它应该工作: com.vaadin.data。 util.sqlcontainer.query.generator.MSSQLGenerator

(您可以通过Eclipse Explorer> Libraries> Ivy> vaadin-server-7.4.0-sources.jar> ..打开源代码..)

+0

对。我之前没有发布我的代码,但现在我正在编辑我的原始帖子。看看这段代码,你会发现我确实使用MSSQLGenerator来处理TableQuery。但是,无论如何,当我切换到使用FreeformQuery时,所有对TableQuery的引用都被注释掉了。但是,当代码运行时,会引用第38行的错误,该错误现在已被注释掉。 我也做了另一个项目,复制这个到最后的细节,它工作得很好。没有意义。它必须与Eclipse有关。 – Sturm