【问题标题】:Exception java.sql.SQLException: Could not set parameter at position (...). whit mariadb异常 java.sql.SQLException: 无法在位置 (...) 设置参数。怀特玛丽亚德
【发布时间】:2018-01-03 03:31:38
【问题描述】:

以下代码通过使用mariadb管理器向我抛出异常,这与mysql未通过,允许我执行executeUpdate,但不能执行Query。我已经寻求解决方案的真相,但没有一个是我的情况,因为我没有犯任何这些错误。已经重装了java和mariadb,还是不行。谢谢!

这是我的代码:

package Conexion;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;


public class mainPruebas {

    public static void main(String[] args) 
    {
        String url = "jdbc:mariadb://127.0.0.1:3306/buscadorpersonas?autoReconnect=true&useSSL=false";
        String user = "root";
        String pass = "2222";
        Connection conexion=null;
        PreparedStatement ps=null;
        try {

            conexion = DriverManager.getConnection(url,user,pass);

            ps = conexion.prepareStatement("SELECT CODIGOCLIENTE, EMPRESA, POBLACION FROM tclientes WHERE POBLACION='?';");
            ps.setString(1, "MADRID");
            ResultSet rs = ps.executeQuery();

            while(rs.next()) {
                System.out.println(rs.getString("CODIGOCLIENTE")+" "+rs.getString("EMPRESA")+" "+rs.getString("POBLACION"));
            }

            conexion.close();

        }catch(Exception e) {

            e.printStackTrace();
        }
    }
}

例外:

java.sql.SQLException:无法在位置 1 设置参数(值 曾是 'MADRID') 查询 - conn:8(M) - "SELECT CODIGOCLIENTE, EMPRESA, POBLACION FROM tclientes WHERE POBLACION='?';" 在 org.mariadb.jdbc.internal.util.exceptions.ExceptionMapper.getSqlException(ExceptionMapper.java:192) 在 org.mariadb.jdbc.MariaDbPreparedStatementClient.setParameter(MariaDbPreparedStatementClient.java:435) 在 org.mariadb.jdbc.BasePrepareStatement.setString(BasePrepareStatement.java:1379) 在 Conexion.mainPruebas.main(mainPruebas.java:22)

【问题讨论】:

    标签: java mysql mariadb


    【解决方案1】:

    去掉PreparedStatement中问号两边的引号

    ps = conexion.prepareStatement("SELECT CODIGOCLIENTE, EMPRESA, POBLACION FROM tclientes WHERE POBLACION=?;");
    

    【讨论】:

    • 非常感谢,就是这样!真可惜,这很简单
    【解决方案2】:

    替换
    ps = conexion.prepareStatement("SELECT CODIGOCLIENTE, EMPRESA, POBLACION FROM tclientes WHERE POBLACION='?';")

    ps = conexion.prepareStatement("SELECT CODIGOCLIENTE, EMPRESA, POBLACION FROM tclientes WHERE POBLACION=?;")

    注意:我已经删除了 ? 周围的 ''

    【讨论】:

    • 非常感谢,就是这样!真可惜,这很简单
    猜你喜欢
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    • 2014-11-18
    • 2022-06-15
    • 1970-01-01
    相关资源
    最近更新 更多