gpt4 book ai didi

java - 从 Java 调用存储过程

转载 作者:行者123 更新时间:2023-11-29 07:29:24 27 4
gpt4 key购买 nike

我正在尝试从我的 Java 应用程序调用 mySQL 存储过程。当我从 mySQL workbench 调用存储过程时,它可以工作,并且我根据发送的参数获得正确的行数。当我尝试从 Java 调用它时,问题就来了,我没有得到任何结果,也找不到原因。我一直在关注 oracle 文档。

存储过程:

CREATE DEFINER=`root`@`localhost` PROCEDURE `comprobarUsuario`(
IN usu varchar(20),
IN pass varchar(20),
OUT idusuarios int)
BEGIN
SELECT idusuarios
FROM usuarios
WHERE usuarios.nombreUsuario = usu and usuarios.contraseña = pass;

END

我试图在其中调用存储过程的 Java 类:

public class ConectorSQL {

public static final String URL = "jdbc:mysql://localhost:3306/ProyectoBD?autoReconnect=true&useSSL=false";
public static final String USERNAME = "root";
public static final String PASSWORD = "1627Admin";

public static Connection getConnection() {
Connection con = null;
try {
Class.forName("com.mysql.jdbc.Driver");
con = (Connection) DriverManager.getConnection(URL, USERNAME, PASSWORD);
//System.out.println("Conexion exitosa");

} catch (Exception e) {
System.out.println("Error de conexión con la base de datos");
}
return con;
}

public void mostrarDatos() {
try {
Connection con = null;
con = getConnection();

CallableStatement cs;
cs = con.prepareCall("{CALL comprobarUsuario(?,?,?)}");
cs.setString(1,"Jorge" );
cs.setString(2, "1627Jorge");
cs.registerOutParameter(3, Type.INT);
ResultSet rs2 = cs.executeQuery();

if(rs2.next()){
System.out.println(true);
}
int resultado = cs.getInt("idusuarios");
System.out.println(resultado);
con.close();

} catch (Exception e) {

}
}
}

最佳答案

过程和 Java 代码几乎不需要采用。那么让我们从程序开始:

create DEFINER=`root`@`localhost` PROCEDURE `comprobarUsuario`(
IN usu varchar(20),
IN pass varchar(20),
OUT idusuarios int)
BEGIN
SELECT usuarios.idusuarios
into idusuarios
FROM usuarios
WHERE usuarios.nombreUsuario = usu and usuarios.contraseña = pass;
end

您想从数据库中检索值“idusuarios”。所以你需要把它保存在参数值中。确保 select 子句中的参数和值彼此不同,或者通过 [tablename].[column] 或别名提供列名。

Java 问题:您根本不需要 ResultSet 对象。要从过程输出参数访问值,请使用 CallableStatement 类提供的 cs.getInt()。

public void mostrarDatos(){
Connection con = null;
try {
con = getConnection();
CallableStatement cs = con.prepareCall("{CALL comprobarUsuario(?,?,?)}");
cs.setString(1, "Jorge");
cs.setString(2, "1627Jorge");
cs.registerOutParameter(3, java.sql.Types.INTEGER);
cs.executeUpdate();

int resultado = cs.getInt(3);
System.out.println(resultado);

} catch (Exception e) {
System.out.println(e);
} finally {
if(con != null) {
try {
con.close();
} catch (SQLException e) {
System.out.println(e);
}
}
}
}

关于java - 从 Java 调用存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52227066/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com