Jdbc - 连接远程Mysql数据库错误

时间:2012-10-20 04:18:46

标签: java mysql database jdbc

[解决]

我终于解决了问题,连接一切都没问题......

问题出在一个SQL查询中,我在表中选择了一个名为“arduinoData”的选项,真正的名字是“arduinodata”。

这种方式适用于本地,但是当我尝试在线时,却没有。

因为这个,返回'null',而Java试图解析它并显示错误。

对不起,我很抱歉,谢谢大家。


我正在使用JDBC将我的程序连接到MySQL数据库。

我已经输入了端口号,是的,我的数据库有权访问。

当我完全使用localhost工作时,但是当我尝试连接到远程MySQL数据库时,在控制台上显示此错误。

java.lang.ExceptionInInitializerError
Caused by: java.lang.NumberFormatException: null
    at java.lang.Integer.parseInt(Integer.java:454)
    at java.lang.Integer.parseInt(Integer.java:527)
    at serial.BDArduino.<clinit>(BDArduino.java:25)
Exception in thread "main" Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)

提前谢谢你!

3 个答案:

答案 0 :(得分:2)

注意:这本来是评论但是太长了。似乎人们看到NFE并猜测它的端口是否为空。这是误导。这是一个显示端口的WORKING代码。请避免误导回答。

        try {
          Class.forName("com.mysql.jdbc.Driver");
          String sourceURL = "jdbc:mysql://localhost/sodb";

          Connection conn = DriverManager.getConnection(sourceURL, "naishe", "p2ssword");
          Statement st = conn.createStatement();
          ResultSet rs = st.executeQuery("select count(*) from test_tab");
          while(rs.next()){
              System.out.println(rs.getString(1));
          }
        } catch(ClassNotFoundException cnfe) {
          System.err.println(cnfe);
        } catch(SQLException sqle) {
          System.err.println(sqle);
        }

它正确打印3(表test_tab中的记录数)。


如果您使用标准驱动程序不需要端口,则默认为3306!看这里 http://dev.mysql.com/doc/refman/5.5/en/connector-j-reference-configuration-properties.html

  

JDBC URL格式

     

MySQL Connector / J的JDBC URL格式如下,方括号([,])中的项是可选的:

     

jdbc:mysql://[host][,failoverhost...][:port]/[database] » [?propertyName1][=propertyValue1][&propertyName2][=propertyValue2]...

     

如果未指定主机名,则默认为127.0.0.1。 如果未指定端口,则默认为3306,即MySQL服务器的默认端口号。

答案 1 :(得分:-1)

我认为您错过了连接字符串中的端口号。

static String url = "jdbc:mysql://mysql.mydomain.com.br:3306/myDB";

而不是

static String url = "jdbc:mysql://mysql.mydomain.com.br/myDB";

现在,如果获得相同的错误意味着你可以用IP地址替换 mysql.mydomain.com.br ,如下所示:

只需在数据库连接字符串中提供远程计算机的IP /主机名,而不是mysql.mydomain.com.br。例如:

jdbc:mysql://172.16.15.225:3306/yourdatabase

同时检查没有防火墙阻止访问端口3306。

确保允许您连接的用户从此特定主机名进行连接。对于开发环境,可以通过

执行此操作
'username'@'%'

这是针对用户的授予权限 GRANT manual.

答案 2 :(得分:-1)

您应该使用port numbers中的connection url as 3306,并且如果未授予,请确保用户对数据库访问权限,您应该授予用户访问权限的权限远程数据库,请参阅link