【问题标题】:No Database selected SQLException using Datasource没有选择数据库使用数据源的 SQLException
【发布时间】:2014-10-31 21:44:04
【问题描述】:

我已经使用 servlet 创建了一个 webapp。我正在使用DataSource 对象建立与MySQL database 的连接,并在加载网页时获得以下堆栈跟踪:

java.sql.SQLException: No database selected
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1084)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4232)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4164)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2615)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2776)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2832)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2781)
    at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1569)
    at uk.co.morleys.TestimonialService.countTestimonials(TestimonialService.java:106)
    at uk.co.morleys.TestimonialService.getPaginationDetails(TestimonialService.java:122)
    at uk.co.morleys.HomeController.doGet(HomeController.java:77)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176)
    at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
    at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
    at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:394)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:748)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:486)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:411)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338)
    at org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:213)
    at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:171)
    at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
    at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
    at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:394)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

这是 TestimonialService.java 文件:

public class TestimonialService {
    ResultSet rs;
    DataSource ds;

    public TestimonialService(){
        rs = null;
        ds = DataSourceFactory.getMySQLDataSource();
    }
    public int countTestimonials() throws SQLException{
        int count = 0;
        try(Connection con = ds.getConnection()){
            Statement stmt = con.createStatement();
            rs = stmt.executeQuery("SELECT COUNT(*) FROM morleys_testimonial WHERE isActive=1");
            while(rs.next()){
                count = rs.getInt(1);
            }
        }catch(SQLException e){
            e.printStackTrace();
        }
        return count;
    }
}

这是我与数据库建立连接的 DataSourceFactory.java:

public class DataSourceFactory {

    public static DataSource getMySQLDataSource() {
        MysqlDataSource mysqlDS = null;
        try {
            mysqlDS = new MysqlDataSource();
            mysqlDS.setURL("jdbc:mysql://hostname/");
            mysqlDS.setDatabaseName("dbname");
            mysqlDS.setUser("user");
            mysqlDS.setPassword("password");
        } catch (Exception e) {
            throw new IllegalStateException(e);
        }
        return mysqlDS;
    }
}

问题 我没有选择setDatabaseName() 的数据库吗?如果不是,我该怎么做?

【问题讨论】:

    标签: java mysql datasource


    【解决方案1】:

    你为什么不试试这个

    mysqlDS.setURL("jdbc:mysql://hostname/dbname");
    

    而不是

    mysqlDS.setDatabaseName("dbname");
    

    【讨论】:

    • 这已解决,谢谢!如果提供了相关方法,不确定为什么其他方法不起作用?
    【解决方案2】:

    您是否提供了端口号和主机名?如果不尝试提供端口号。 另外确保你有 Mysql JDBC Driver 您可以按照这些教程中的任何一个来创建 MysqlDataSource:

    http://www.journaldev.com/2509/jdbc-datasource-example-oracle-mysql-and-apache-dbcp-tutorial

    http://www.herongyang.com/JDBC/MySQL-JDBC-Driver-DataSource.html

    【讨论】:

      猜你喜欢
      • 2016-04-14
      • 1970-01-01
      • 2019-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-31
      • 2017-06-10
      • 1970-01-01
      相关资源
      最近更新 更多