Java 프로그램을 개발 중이며 데이터베이스가 필요합니다. 이제 MAMP를 사용하고 있으며 꽤 쉽지만 가상 머신 (우분투 서버)이 있고 vitualBox를 사용하여 Java 프로그램을이 가상 머신에 연결해야합니다.
그 상황:
- Mac에 VirtualBox를 설치하고 우분투 서버 시스템을 설치했습니다.
- VB의 네트워크 설정에서 “브리지 어댑터”설정
- 우분투 서버에 mysql을 설치하고 간단한 데이터베이스를 만들었습니다 (모두 우분투에서 잘 작동합니다)
- 우분투로 ifconfig를하고 ip를 얻습니다 : 192.168.1.217
그래서 자바 프로그램 에서이 기능을 만들었습니다.
public static Connection connect(String host, int port, String dbName, String user, String passwd)
{
Connection dbConnection = null;
try
{
String dbString = null;
Class.forName("com.mysql.jdbc.Driver").newInstance();
dbString = "jdbc:mysql://" + host + ":" + port + "/" + dbName;
dbConnection = DriverManager.getConnection(dbString, user, passwd);
}
catch (Exception e)
{
System.err.println("Failed to connect with the DB");
e.printStackTrace();
}
return dbConnection;
}
그리고 main ()에서 다음을 사용합니다.
Connection con = connect(1, "192.168.1.217", 3306, "Ciao", "root", "cocacola");
3306이 기본값입니다. 나는 정확한지 모르겠다. VB와 함께 사용해야하는 올바른 포트를 어떻게 찾을 수 있습니까?
프로그램을 실행하면 캐치 예외가 발생합니다. 무엇이 잘못 되었나요?
답변
bind_address에 대한 /etc/my.cnf/
또는 /etc/mysql/my.cnf
파일을 확인하십시오 . MySQL은 기본적으로 localhost에 바인딩되므로 0.0.0.0으로 설정해야합니다.
검색:
bind-address = 127.0.0.1
바꾸다:
bind-address = 0.0.0.0
my.cnf 파일이 없으면 만들 수 있습니다. 이 경우 최소한 다음이 필요합니다.
[mysqld]
bind-address = 0.0.0.0
답변
메소드가 잘못된 매개 변수를 사용합니다. 비교
public static Connection connect(String host, int port, String dbName, String user, String passwd)
와
Connection con = connect(1, "192.168.1.217", 3306, "Ciao", "root", "cocacola");
이것은 문자열 dbString을 만들 때 만들고 있음을 의미합니다.
jdbc:mysql://1:192.168.1.217/3306;
그러나 오버로드가 일치하지 않으므로이 멀리까지 도달 한 것에 놀랐습니다 (C #은 Java가 아니므로 이것이 가능할 수도 있습니다)! Connection Connect는 5 개의 매개 변수를 취하지 만 메소드를 호출하면 6을 전달합니다!
나는 변화를 생각한다
Connection con = connect(1, "192.168.1.217", 3306, "Ciao", "root", "cocacola");
에
Connection con = connect("192.168.1.217", 3306, "Ciao", "root", "cocacola");