ich gespeicherte Prozedur in MySQL geschrieben, die wie folgt aussieht (es funktioniert):Wie das Ergebnis zu beheben bestand aus mehr als eine Zeile Fehler
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 ;
Ich versuche, sie mehrere Ergebnisse zurückgeben und anzuzeigen. Ich habe viele Möglichkeiten ausprobiert, die hier auf Stack und im Internet beschrieben sind, aber das hilft mir nicht. Ich habe meinen gesamten Code bearbeitet und einen einfachen erstellt, damit Sie ihn einfügen und kompilieren können. Es sollte aber mit Fehler funktionieren. Hier ist der Code:
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();
}
}
'Ergebnis bestand aus mehr t han one row "... Ich denke, das Problem ist, dass die Abfrage in Ihrem gespeicherten Prozess mehr als einen Datensatz zurückgibt. Sie müssen das beheben. Ich repariere schnell, wenn auch vielleicht nicht logisch korrekt, würde "LIMIT 1" am Ende der Abfrage hinzufügen. Aber es wäre besser für Sie, Logik hinzuzufügen, die auf eine Aufzeichnung in Übereinstimmung mit einer gesunden Geschäftslogik beschränkt ist. –
Zurückgeben und Bearbeiten mehrerer Datensätze mit Prozedur. Ich mache das zum ersten Mal. Ich meine, ich möchte mehrere Datensätze von der Prozedur bekommen und durch jedes Rów wie mit dem Cursor schauen. – anton86993
Wenn Sie artikulieren können, was Sie mit mehreren Datensätzen machen möchten, kann Ihnen vielleicht jemand helfen. –