#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) {}
}
}