2015-01-10 131 views
-1

所以我只是想知道,这个代码在这里做了什么(也许还有多少...)?Java:连接到MySQL数据库?的DriverManager.getConnection()?

try { 
    Class.forName("com.mysql.jdbc.Driver"); 
    Connection c = DriverManager.getConnection("jdbc:mysql://mysql1.000webhost.com/mydatabase", "myusername", "mypassword"); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
} 

由于我三重检查了用户名/密码,我猜这是主机名错误。数据库只在服务器上(我没有任何保存的本地版本或任何类型的...我需要吗?)。

此外,有人可以告诉我,如果我在正确的路线上,我想做什么?基本上我已经创建了一个免费版本和一个非常便宜的付费版本的软件。我在想,为了防止盗版,因为程序需要互联网连接,所以我可以将他们的电子邮件地址存储为用户名,然后他们的计算机的MAC地址就是密码(每次程序运行时,我都会比较MAC地址他们的个人电脑与他们的电子邮件一起在数据库中注册,我不知道这是否是一种好的反盗版措施,但我只是想知道,如果我设法使连接工作,那是我倒是能够做到或会有如安全问题呢?

无论如何,感谢提前:)

+2

你究竟得到了什么异常? – Mat

+1

请打开命令提示符并运行以下命令“telnet mysql1.000webhost.com PORT”,其中PORT是数据库侦听连接的MYSQL端口 - 检查输出 – user1428716

回答

0

编写一段java代码从远程连接操作你的数据库是不是一个好主意。有人可能会对您的代码进行反向工程并更改您的数据。

您应该至少在网络上实施一项简单的服务,以处理您可能收到的垃圾邮件,并保护您的数据。

+0

是的,我肯定需要考虑未来的这个东西,但在这种情况下,我只会卖5美元的软件...希望人们有更好的事情可以做,而不是尝试和破解5美元的软件; –

0

我觉得你在你的URL。尝试这个没有错过数据库端口:

try { 
    Class.forName("com.mysql.jdbc.Driver"); // Not Required for JDBC 4.0 onwards 
    Connection c = DriverManager.getConnection("jdbc:mysql://mysql1.000webhost.com: 3306/mydatabase", "myusername", "mypassword"); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } 
+0

我确实想念:)由于某种原因它仍然无法正常工作。老实说,这并不重要,因为我认为我只是通过手动将人们的安全密钥手动发送到老式的方式... –

+0

@JoshM你可以请你发布异常的StackTrace,以便我可以弄清楚究竟发生了什么问题。 –

+0

@JoshM,也可以尝试将“mysql1.000webhost.com”替换为“localhost”或您计算机名称的网址 –

1

如果不是localhost我不能在主机上发表评论,但你也得给端口number.It丢失。

Connection con = DriverManager 
       .getConnection("jdbc:mysql://"+pHost+":"+pPort+"/Your_mysql_schema_name",username, password); 

,并在你的MYSQL架构名称将是你给的模式名,并且也端口number.Usually对于MySQL其3306

+0

是的,我不确定为什么没有答案。我决定现在我只是使用一种不同的方法,但即使你ping通mysql.000webhost.com,你也没有收到任何东西.. –

+0

嗨@JoshM对于迟到的回复抱歉。希望你已经修复了这个问题。但是我想如果你不能ping你的MYSQL服务器mysql.000webhost.com.Make肯定它正在运行,可能它的url是不同的。但是,这应该是有效的。 –

0

尝试,而不是mysql1.000webhost.com与服务器IP更改数据库name.Ensure地址。
例,

try { 
    Class.forName("com.mysql.jdbc.Driver"); 
    Connection c = DriverManager.getConnection("jdbc:mysql://123.456.789.012:3306/mydatabase", "myusername", "mypassword"); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } 
+0

不,不幸的是,这是行不通的。在000Webhost上说:“重要:MySQL帐户中的任何数据库的MySQL主机都是mysql5.000webhost.com,请勿使用本地主机!”但是,当我尝试ping服务器时,我一直没有收到数据包......哦:( –

0

我会建议你一些reading第一。此幻灯片可能会向您展示如何构建Java EE应用程序。

接下来,您可能需要阅读更多how to connect your application with a database

Hibernate是在数据库和Java程序之间建立连接的最广泛使用的工具之一。它允许您使用xml格式的配置文件将您的连接数据(例如用户名,密码,连接url)从您的代码中分离出来。该行:

Connection c = DriverManager.getConnection("jdbc:mysql://mysql1.000webhost.com/mydatabase", "myusername", "mypassword"); 

建立连接是一种非常危险的方式,因为您在代码中提供了机密凭据。有许多方法可以从二进制文件中检索这些信息。

您还问过,是否值得拥有本地版本的数据库。答案是:是的。将数据库本地化可能会显着加快开发和测试所需的时间。即使没有互联网连接,它也可以让你处理你的代码。

使用MAC地址提供身份验证是一个非常危险的想法。这些地址连接到给定的机器。换句话说,用户只能通过机器连接到您的应用程序,并在其上创建帐户。当使用其他计算机时(例如工作时的笔记本电脑),身份验证将被拒绝。

+0

)是的,我绝对需要做大量的阅读!我会检查这些链接和Hibernate tommorow :)说实话,如果我正在开发一个更专业的程序和/或有安全的数据存储,那显然这是一个禁忌,但由于唯一可以存储的东西是他们的电子邮件和MAC地址,我不会太担心安全... –

+0

但我决定使用MAC地址的原因恰恰是... 1台计算机的1个许可证。无论如何,这是一个相对简单的(稍微有点利基的)程序,所以我真的不认为有人会关心他们是否在另一台设备上使用它。 –

+0

在这种情况下,请记住,只需点击几下鼠标,就可以更改MAC地址或将其克隆到外部设备(例如rooters)。这意味着当有人通过有效的许可证访问计算机时,可以轻松跳过这种验证方式。 – Tinki