Połączenie z bazą danych która jest na innym komputerze.

0

Witam mam do was ogromną prośbę o porade w sprawie podłączenia się do bazy danych która jest na serwerze bazy danych na innym komputerze niż program. Czy w tym przypadku też należy dodać baze do systemu tam gdzie jest program czy może to się robi inaczej. Prosze o przykładowy kod łączenia się z tą bazą.

Pozdrawiam! i z góry dziękuje za jakąkolwiek pomoc.

0

Nie chciało mi się przerabiać mojego więc będziesz miał tak trochę ładniej ;-)
Klasa Singelton do Łączenia się z bazą danych:

package pl.kaziuuu.database;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import java.util.Properties;

import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;

import java.io.IOException;

public class OracleConnection {
	private static Connection connection;

	private OracleConnection() {
	}

	public static Connection getConnection() throws ClassNotFoundException,
			SQLException, ParserConfigurationException, SAXException, IOException {
		Configuration conf = new Configuration("conf.xml");
		Properties props = new Properties();
		String dbURL = "jdbc:oracle:thin:@" + conf.getHost() + ":"
				+ conf.getPort() + ":" + conf.getSid();
		if (connection == null) {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			props.put("user", conf.getUsername());
			props.put("password", conf.getPassword());
			connection = DriverManager.getConnection(dbURL, props);
		}
		return connection;
	}
}

Klasa odczytująca konfiguracje bazy danych z pliku xml:

package pl.kaziuuu.database;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.InputSource;

import java.io.IOException;

public final class Configuration extends DefaultHandler {
	private String host = "";

	private String password = "";

	private String username = "";
 
	private String sid = "";

	private String port = "";
	
	private int what = 0;
	
	private final static int HOST=1;
	
	private final static int PASSWORD=2;
	
	private final static int USERNAME=3;
	
	private final static int SID=4;
	
	private final static int PORT=5;
	
	
	public Configuration(String fileName) throws ParserConfigurationException,
			SAXException, IOException {
		SAXParserFactory saxFactory = SAXParserFactory.newInstance();
		SAXParser saxParser = saxFactory.newSAXParser();
		saxParser.parse(new InputSource(fileName), this);
	}

	public void startElement(String uri, String localName,
	         String qName, Attributes atts) throws SAXException {
		if(qName.equalsIgnoreCase("host"))what=HOST;
		if(qName.equalsIgnoreCase("password"))what=PASSWORD;
		if(qName.equalsIgnoreCase("username"))what=USERNAME;
		if(qName.equalsIgnoreCase("sid"))what=SID;
		if(qName.equalsIgnoreCase("port"))what=PORT;
	}
	
	 public void characters(char ch[], int start,
	         int length) throws SAXException {
	    String data = new String(ch, start, length).trim();  
	    switch(what){
	    	case HOST:{
	    		if(!data.equals("")){
		    		host=new String(data);
		    	}
	    		break;
	    	}
	    	case PASSWORD:{
	    		if(!data.equals("")){
					password=new String(data);
				}
	    		break;
	    	}
	    	case USERNAME:{
	    		if(!data.equals("")){
					username=new String(data);
				}
	    		break;
	    	}
	    	case SID:{
	    		if(!data.equals("")){
					sid=new String(data);
				}
	    		break;
	    	}
	    	case PORT:{
	    		if(!data.equals("")){
					port=new String(data);
				}
	    		break;
	    	}
	    }
	}

	public String getHost() {
		return host;
	}

	public String getPassword() {
		return password;
	}

	public String getUsername() {
		return username;
	}

	public String getSid() {
		return sid;
	}

	public String getPort() {
		return port;
	}
}

Plik konfiguracyjny xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<conf>
	<host>host.pl</host>
	<port>1521</port>
	<sid>sid</sid>
	<username>lol</username>
	<password>lol</password>
</conf>

W pliku xml zmieniasz sobie tylko parametry i możesz się łączyć z bazą danych na dowolnym serwerze :d Baza może być postawiona na dowolnym komputerze w sieci, nie musi być na tym na którym jest zainstalowana aplikacja. Przykład ten jest na bazę Oracle ale przerobienie go na inne bazy nie stanowi problemu, dodajesz jeszcze dwie klasy MySqlConnection, PosgreConnection, klasą Factory do tworzenia instancji połączenia do konkretnej bazy i masz przenośną aplikacje :-)

0
public static Connection getConnection() throws ClassNotFoundException,
                        SQLException, ParserConfigurationException, SAXException, IOException {
                String dbURL = "jdbc:oracle:thin:@host:port:nazwa_bazy"
                if (connection == null) {
                        Class.forName("oracle.jdbc.driver.OracleDriver");
                        connection = DriverManager.getConnection(dbURL,"login","haslo");
                }
                return connection;
        }

troche przerobiłem poczatek. Powiedz mi czy takie coś zadziała jak będe miał na stałe wrzucone wszytsko. I co to "thin:@" oznacza.

Załóżmy że mam sieć 2 komputery. na komputerze numer 1 jest linux z serwerem oracle i teraz mi powiedz "host" co to oznacza (to nazwa serwer czy może komputera w sieci, port czyli na jakim portcie jest komputer czy serwer uruchomiony.)

Generalnie chodzi mi o to jak po podaniu Hostnazwa_bazy program będzie wiedział zę ta baza jest na tym serwerze który jest na komputerze numer 1.

Dzięki za pomoc.

0

Host to adres ip lub adres dns na którym chodzi baza danych, u ciebie będzie to adres ip pierwszego kompa, port to numer portu na którym chodzi baza danych Oracle, sid to taki identyfikator bazy w systemie Oracle, co do thin:@ nie wiem jak to precyzyjnie określić, ale tam są zawarte informacje o sterowniku i serwerze bazy danych. Ps A wszystkie ustawienia zmieniasz tylko w pliku XML tak że w kodzie nie musisz grzebać.

0

Rozne RDBMS maja rozne connectionStringi oraz klasy sterownikow (dokladne info znajdziesz na stronie producenta), wiec te informacje rowniez powinny sie znalezc w pliku konfiguracyjnym a nie na sztywno w kodzie.
Druga sprawa dotyczy samego systemu - zwykle zaraz po zainstalowaniu maja one domyslnie wylaczone polaczenia TCP (wymaga tego JDBC) wiec nalezy zmienic to w ustawieniach serwera.

pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1