【问题标题】:Illegal connection port value 'mysql' not able to fetch values from database非法连接端口值“mysql”无法从数据库中获取值
【发布时间】:2013-05-14 16:27:18
【问题描述】:

您好,我正在尝试通过以下代码建立从我的 java 到 SQL 工作台的连接--

MysqlDataSource dataSource = new MysqlDataSource();
        dataSource.setServerName("jdbc:mysql://localhost:XXXX/Recommendation1")
        dataSource.setUser("root");
        dataSource.setPassword("XXXXXXXX");
        dataSource.setDatabaseName("Recommendation1");
        JDBCDataModel dataModel = new MySQLJDBCDataModel(dataSource);

我还在我的 lib 目录中包含了 mysql-connector-java-5.0.8-bin.jar 仍然出现以下错误

org.apache.mahout.cf.taste.common.TasteException: java.sql.SQLException: Illegal connection port value 'mysql:'
    at org.apache.mahout.cf.taste.impl.model.jdbc.AbstractJDBCDataModel.getNumThings(AbstractJDBCDataModel.java:596)
    at org.apache.mahout.cf.taste.impl.model.jdbc.AbstractJDBCDataModel.getNumItems(AbstractJDBCDataModel.java:552)
    at org.apache.mahout.cf.taste.impl.recommender.slopeone.MemoryDiffStorage.<init>(MemoryDiffStorage.java:89)
    at org.apache.mahout.cf.taste.impl.recommender.slopeone.SlopeOneRecommender.<init>(SlopeOneRecommender.java:69)
    at com.HelloServlet1.doPost(HelloServlet1.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:679)

错误的主要原因是项目的lib目录中没有包含mysql-connector-java-5.0.8-bin.jar ,但是在这种情况下可能是什么原因

谢谢

【问题讨论】:

  • 我怀疑这个错误是否是因为类路径中没有 mysql 连接,如果它不存在,你会收到类似 NoClassDefFounError for MysqlDataSource

标签: java mysql database mysql-workbench


【解决方案1】:

这看起来像是配置问题。这是一个示例配置:

  ds.setServerName("localhost");
  ds.setPortNumber(3306);
  ds.setDatabaseName("testdb");
  ds.setUser("scott");
  ds.setPassword("tiger");

【讨论】:

    【解决方案2】:

    因为你已经在这里设置了数据库名称

    dataSource.setDatabaseName("Recommendation1");
    

    服务器名称中无需指定

    dataSource.setServerName("jdbc:mysql://localhost:XXXX/Recommendation1")
    

    因此,查看异常,它假设服务器名称中的字符串'mysql'(因为它在jdbc 之后跟随: 字符)是一个端口。你可以试试这个吗?

    dataSource.setServerName("localhost:XXXX");
    

    【讨论】:

      【解决方案3】:

      您是否真的需要设置数据库名称,因为您的 jdbc 连接 URL 中似乎有它。

      需要吗?

      dataSource.setDatabaseName("Recommendation1");
      

      当你在这里有 dbname 时

      dataSource.setServerName("jdbc:mysql://localhost:XXXX/Recommendation1")
      

      【讨论】:

        【解决方案4】:

        你应该使用

        dataSource.setServerName("localhost:3306"); //Default port for MySQL
        

        而不是使用

        dataSource.setServerName("jdbc:mysql://localhost:XXXX/Recommendation1");
        

        因为,setServerName 方法需要只需要服务器的名称以及 MySQL 正在运行的端口,而不是整个连接字符串

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-10-03
          • 2017-10-06
          • 1970-01-01
          • 2021-07-26
          • 2014-08-20
          • 2013-09-10
          • 2016-08-21
          • 1970-01-01
          相关资源
          最近更新 更多