Подключение к apache phoenix с помощью JDBC и Java

У меня есть небольшая Java-программа, в которой я пытаюсь установить соединение с удаленным сервером Phoenix, который у меня запущен.

package jdbc_tests;

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

public class PhoenixTest {

    static final String JDBC_DRIVER = "org.apache.phoenix.jdbc.PhoenixDriver";
    static final String IP = "<placeholder>"
    static final String PORT = "<placeholder>"
    static final String DB_URL = "jdbc:phoenix://" + IP + ":" + PORT + "/";

    public static void main(String[] args) {
        Connection conn = null;
        Statement st = null;

        try {
            Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");

            System.out.println("Connecting to database..");

            conn = DriverManager.getConnection(DB_URL);

            System.out.println("Creating statement...");

            st = conn.createStatement();
            String sql;
            sql = "SELECT DISTINCT did FROM sensor_data";
            ResultSet rs = st.executeQuery(sql);

            while(rs.next()) {
                String did = rs.getString(1);
                System.out.println("Did found: " + did);
            }

            rs.close();
            st.close();
            conn.close();

        } catch (SQLException se) {
            se.printStackTrace();
        } catch (Exception e) {
            // Handle errors for Class.forName
            e.printStackTrace();
        } finally {
            // finally block used to close resources
            try {
                if (st != null)
                    st.close();
            } catch (SQLException se2) {
            } // nothing we can do
            try {
                if (conn != null)
                    conn.close();
            } catch (SQLException se) {
                se.printStackTrace();
            } // end finally try
        } // end try
    System.out.println("Goodbye!");
    }
}

Когда я пытаюсь запустить свою программу, я получаю:

java.sql.SQLException: No suitable driver found for jdbc:phoenix://<ip>:<port>/

Я добавил следующую банку из дистрибутива Apache Phoenix:

phoenix-4.9.0-HBase-1.2-client.jar

что соответствует моим версиям Phoenix и Hbase.

Что я делаю не так?


person Zeliax    schedule 28.03.2017    source источник
comment
Ваш URL-адрес неверен: вы должны удалить //. См. также phoenix.apache.org.   -  person Mark Rotteveel    schedule 28.03.2017
comment
Возможный дубликат ​​печально известного java.sql.SQLException: нет подходящего драйвера найдено   -  person Prajjwal Srivastav    schedule 28.03.2017
comment
@PrajjwalSrivastav Я не согласен   -  person Zeliax    schedule 28.03.2017
comment
Было опробовано несколько простых поисков в гугле...   -  person Zeliax    schedule 28.03.2017


Ответы (2)


Я думаю, что вам не хватает имени вашей базы данных, а также неправильный URL-адрес:

"jdbc:phoenix://" + IP + ":" + PORT + "/" + DB_NAME
//--------------------------------------------^^

Вместо этого вы должны попробовать использовать этот URL:

Connection con = DriverManager.getConnection("jdbc:phoenix:<IP>:<port>:/<DB_NAME>");
person YCF_L    schedule 28.03.2017
comment
Спасибо за предложение, но добавление DB_NAME не решило проблему. - person Zeliax; 28.03.2017
comment
вы получили какую-либо другую ошибку при использовании DB_NAME или это все тот же @Zeliax? - person YCF_L; 28.03.2017
comment
Все еще получил то же сообщение об ошибке.. java.sql.SQLException: No suitable driver found for jdbc:phoenix://<ip>:<port>/<db_name> - person Zeliax; 28.03.2017
comment
Да. Это сработало и является решением! Однако мне не нужно было использовать часть DB_Name. Поэтому я использовал "jdbc:phoenix:<IP>:<PORT>/. Однако после этого я сталкиваюсь с другой проблемой, но это будет для другого поста: P Спасибо! - person Zeliax; 28.03.2017

URL-адрес не должен содержать "//", он должен быть таким: jdbc:phoenix:192.168.4.251:2181:/hbase-unsecure

person Keshav Kumar    schedule 09.10.2018