Я написал хранимую процедуру в MySQL, который выглядит следующим образом (он работает):Как исправить результат состоял из более чем одной ошибки строки
DELIMITER //
CREATE PROCEDURE getBrandRows(
IN pBrand VARCHAR(30),
OUT pName VARCHAR(150),
OUT pType VARCHAR(200),
OUT pRetailPrice FLOAT)
BEGIN
SELECT p_name, p_type, p_retailprice INTO pName, pType, pRetailPrice
FROM part
WHERE p_brand LIKE pBrand;
END//
DELIMITER ;
Я пытаюсь вернуть несколько результатов и их отображения. Я пробовал много способов, описанных здесь в Stack и в Интернете, но это мне не помогает. Я редактировал весь свой код и создал простой, чтобы вы могли вставлять его и компилировать. Он должен работать, но с ошибкой. Вот код:
package javamysqlstoredprocedures;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
public class JavaMySqlStoredProcedures {
private final String DEFAULT_DRIVER = "com.mysql.jdbc.Driver";
private final String DB_URL = "jdbc:mysql://anton869.linuxpl.eu:3306/"
+ "anton869_cars?noAccessToProcedureBodies=true";
private final String DB_USER = "xxx";
private final String DB_PASSWORD = "xxx";
class CallStoredProcedureAndSaveXmlFile extends SwingWorker<Void, Void> {
@Override
public Void doInBackground() {
displaySql();
return null;
}
@Override
public void done() {
}
private void displaySql() {
try {
System.out.println("Connecting to MySQL database...");
Class.forName(DEFAULT_DRIVER);
try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER,
DB_PASSWORD)) {
System.out.println("Connected to MySQL database");
CallableStatement cs = conn.prepareCall("{CALL getBrandRows("
+ "?, ?, ?, ?)}");
cs.setString(1, "Brand#13");
cs.registerOutParameter(2, Types.VARCHAR);
cs.registerOutParameter(3, Types.VARCHAR);
cs.registerOutParameter(4, Types.FLOAT);
boolean results = cs.execute();
while (results) {
ResultSet rs = cs.getResultSet();
while (rs.next()) {
System.out.println("p_name=" + rs.getString("p_name"));
System.out.println("p_type=" + rs.getString("p_type"));
System.out.println("p_retailprice=" + rs
.getFloat("p_retailprice"));
}
rs.close();
results = cs.getMoreResults();
}
cs.close();
} catch (SQLException e) {
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
public JavaMySqlStoredProcedures() {
new CallStoredProcedureAndSaveXmlFile().execute();
}
public static void main(String[] args) {
JavaMySqlStoredProcedures jmssp = new JavaMySqlStoredProcedures();
}
}
'Результат состоял из более t han one row' ... Я думаю, проблема в том, что в запросе внутри сохраненного proc возвращается более одной записи. Вам нужно это исправить. Я быстро исправить, хотя, возможно, и не логически исправлять, было бы добавить 'LIMIT 1' в конец запроса. Но было бы лучше, если бы вы добавили логику, которая ограничивает одну запись в соответствии со звуковой бизнес-логикой. –
Как вернуть и использовать несколько записей, используя процедуру. Я делаю это в первый раз. Я имею в виду, что я хочу получить несколько записей из процедуры и просматривать каждый текст с помощью курсора. – anton86993
Если вы можете сформулировать, что вы хотите сделать с несколькими записями, то, возможно, кто-то может вам помочь. –