2015-01-10 126 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