Java преобразование ячейки в строку

#java #sql

#java #sql

Вопрос:

У меня есть следующий Java-код: (параметрами являются данные для входа, а также запрос к базе данных)

 public static String connectDB(String configFile, String query) throws FileNotFoundException, IOException, SQLException, ClassNotFoundException {
    Properties p = new Properties();
    p.load(new FileInputStream(configFile));

    String serverName = (p.getProperty("RMS_DBServerName"));
    String portNumber = (p.getProperty("DB_PortNumber"));
    String sid = (p.getProperty("RMS_SID"));
    String url = "jdbc:oracle:thin:@//"   serverName   ":"   portNumber   "/"   sid;
    String username = (p.getProperty("RMS_Username"));
    String password = (p.getProperty("RMS_Password"));

    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection connection = DriverManager.getConnection(url, username, password);

    try {
        Statement stmt = connection.createStatement();

        try {
            ResultSet rset = stmt.executeQuery(query);
            try {
                while (rset.next()) {
                    System.out.println(rset.getString(1));
                }
            } finally {
                try {
                    rset.close();
                } catch (Exception ignore) {
                }
            }
            return rset;
        } finally {
            try {
                stmt.close();
            } catch (Exception ignore) {
            }
        }
    } finally {
        try {
            connection.close();
        } catch (Exception ignore) {
        }
    }
}
 

Предполагается, что код получает одну ячейку из базы данных. Запрос работает, когда результат передается на консоль. Но я хочу вернуть ячейку из метода в другой метод, чтобы автоматизировать процесс. Но возврат возвращает код, подобный этому: jdbc: oracle:OracleDriver#…….. . Итак, кто-нибудь может помочь исправить это, я просто хочу вернуть одну ячейку, содержащую число.

Комментарии:

1. Кстати, это беспорядок для чтения — я бы подумал о том, чтобы включить некоторые из них в служебные функции / etc. В нынешнем виде его цель скрыта и ее трудно распознать.

2. Ваш метод определен для возврата a String , но все же вы возвращаете a (закрыто!) ResultSet . Для меня это не имеет никакого смысла.

Ответ №1:

Вместо того, чтобы печатать строку, верните ее. Прямо сейчас вы возвращаете строковое представление результирующего набора.

Комментарии:

1. то есть: return rset.getString(1) вместо return rset

Ответ №2:

Изменить

 while (rset.next())
         System.out.println(rset.getString(1));
}
 

Для

 if(rset.next()) {
     return rset.getString(1);
}
 

и удалите

 return rset;
 

Комментарии:

1. Я изменил оператор, но теперь он говорит мне добавить возврат, когда он явно присутствует в коде, или изменить на void, но тогда я должен удалить возврат

2. добавить return null; в конец метода

3. Вам нужен a return в каждом пути выполнения. Поэтому верните null или пустую строку в блоке else.

4. Я добавил возвращаемое значение null, и теперь оно возвращает значение NULL, поэтому я больше не получаю никаких данных обратно

Ответ №3:

Я решил проблему с этим кодом, который я получил

 public static String connectDB(String configFile, String query) throws FileNotFoundException, IOException, SQLException, ClassNotFoundException{
    Properties p = new Properties();
    p.load(new FileInputStream(configFile));

    String serverName = (p.getProperty("RMS_DBServerName"));
    String portNumber = (p.getProperty("DB_PortNumber"));
    String sid = (p.getProperty("RMS_SID"));
    String url = "jdbc:oracle:thin:@//"   serverName   ":"   portNumber   "/"   sid;
    String username = (p.getProperty("RMS_Username"));
    String password = (p.getProperty("RMS_Password"));

    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection connection = DriverManager.getConnection(url,username,password);
    String setr = null;
    try {      
        Statement stmt = connection.createStatement();

        try {ResultSet rset = stmt.executeQuery(query);
            try {
                while(rset.next())   
                    setr = rset.getString(1);
                    return setr;  
            }        
            finally {
                try { rset.close(); 
                } 
                catch (Exception ignore) {}

            }
        } 
        finally {
            try { stmt.close(); 
            } 
            catch (Exception ignore) {}
        }
    } 
    finally {
        try { connection.close(); 
        } 
        catch (Exception ignore) {}

    }
}