1

Temat: Łączenie z bazą danych

Cześć. Chce zrobić coś takiego, że łącze się z serwerem bazy i bez wyboru bazy danych. I wtedy jak się połącze selectuje wszystkie bazy do których mam prawa przynajmniej do odczytu.

2

Odp: Łączenie z bazą danych

Do jakiejś bazy trzeba się zalogować domyślną bazą jest postgres, a jak już się zalogujesz wyświetlenie baz danych, do których masz uprawnienie do zalogowania możesz zrobić jak w poniższym zapytaniu

select datname as database from pg_database where has_database_privilege(datname, 'connect').

PS
Select będzie działał na wszystkich bazach danych w obrębie clustra postgresa.
Dobrze skonfigurowany claster postgresa nie powinien jednak pozwolić na zalogowanie się do bazy danych bez uprawnień, pamiętaj, że jeśli łączysz się bez wykorzystania SSL to musisz sobie zdawać sprawę, że średnio zaawansowany użytkownik będzie wstanie poznać wynik działania w/w zapytania.

Ostatnio edytowany przez c_michal (2012-09-21 21:42:17)

3

Odp: Łączenie z bazą danych

Witam,
Napisałem taki kod do połączenia się z baza danych postgresql, przy pomocy postgresql-9.2-1002.jdbc4.jar no ale niestety nie wiem dla czego po uruchomieniu aplikacji która to połączenie wykorzystuje otrzymuje :

blad sql 008001
Nie jestes podlaczony do bazy wiec nie moge wykonac:Select * from Book
Brak danych
Nie jestes podlaczony do bazy wiec nie moge wykonac:Select * from libe_user
Brak danych
Nie jestes podlaczony do bazy wiec nie moge wykonac:Select count(*) from book
Nie jestes podlaczony do bazy wiec nie moge wykonac:Select count(*) from libe_user

Aplikacja się uruchamia no ale nie łączy sie z baza danych, co może być nie tak ?? Szukałem jakiejś literówki ale nie widzę smile może czyjeś wprawne oko wypatrzy błąd jaki popełniłem.

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

import org.postgresql.*;


public class Database {

// true - jesli polaczomy
boolean connected=false;
//server
private static String serwer="//localhost";
//port dla servera
private static int port=5432;
private static Database database;
Connection conn=null;

    private Database(String server,int port){
        this.connect(server,port);
    }
    
    
    public static Database getInstance(){
        
        if(database==null)database = new Database(serwer,port);
        return database;
    }
    
    
    public void connect(String server, int port){
        
        // wybieramy baze jezeli mamy kilka, oracle darmowe ma tylko xe, wiec zostawiamy puste
        String database = "BOOK";
        
        String login = "postgresqluser";
        
        String password = "postgresqluser";
        
        
        //System.out.println("Start");
        try {
            Class.forName("org.postgresql.Driver");

            String connectionString = "org:postgresql" + server + ":"+ port + ":" + database;
             conn= DriverManager.getConnection(connectionString,
                    login, password);

                if(conn!=null)connected=true;

        }catch (SQLException s) {
            
            System.out.println("blad sql " + s.getErrorCode() + ""
                    + s.getSQLState());
        } catch (Exception e1) {
            System.out.println("Blad:" + e1.getMessage());
            if(e1.getMessage().equals("org.postgresql.Driver")){
                System.out.println("Czy zaimportowany jest plik jar ?!");
            }
        }    
        
    }
    
    public ResultSet getData(String sql){
        
        if(connected){ResultSet rc=null;
        Statement st = null;
        try {
            st = conn.createStatement();
            rc = st.executeQuery(sql);
        } catch (SQLException e) {
            System.out.println("Nie udalo sie wykonac: "+sql);
            e.printStackTrace();
        }
        ;
        return rc;        
        }
        System.out.println("Nie jestes podlaczony do bazy wiec nie moge wykonac:"+sql);
        return null;
        }


    public boolean insertSql(String sql) {
        if(connected){
        Statement st = null;
        try {
            st = conn.createStatement();
        st.executeQuery(sql);
        return true;
        }catch(Exception e){
            System.out.println("Blad dodawania do bazy "+e.getMessage());
        return false;    
        }
        }else{
            return false;
        }
        
    }
}