java-如何注入自定义PreparedStatement的参数

java-如何注入自定义PreparedStatement的参数,java,sql,prepared-statement,Java,Sql,Prepared Statement,我正在尝试实现PreparedStatement,它不适用于sql DB 假设我有以下sql查询: String selectSqlQuery = "SELECT * FROM customer WHERE f1 = ? AND f2 =? AND f3 > ?"; 以及以下代码: //---- prest = con.prepareStatement(selectSqlQuery ); prest.setString(1, "val1")

我正在尝试实现PreparedStatement,它不适用于sql DB

假设我有以下sql查询:

String selectSqlQuery = "SELECT * FROM customer WHERE f1 = ? AND f2 =? AND f3 > ?";
以及以下代码:

       //----

        prest = con.prepareStatement(selectSqlQuery );
        prest.setString(1, "val1");
        prest.setString(2, "val2");
        prest.setInt(3, 108);
        ResultSet rs = prest.executeQuery();
        //---
我的问题是如何实现setString和setInt方法来注入参数


目前,我将参数的索引和值保存到HashMap中,但之后我无法将其注入sql查询字符串。

sql java接口的实现是特定于供应商的jdbc驱动程序的一部分。您可能只需要为您的数据库获取适当的JDBCJAR文件。如果您打算编写自己的数据库驱动程序,通常只需要编写这些东西的实现…

sql的java接口实现是特定于供应商的jdbc驱动程序的一部分。您可能只需要为您的数据库获取适当的JDBCJAR文件。如果您打算编写自己的数据库驱动程序,通常只需要编写此类内容的实现…

因为您正在编写自己的驱动程序,所以可以稍微使用您的类。让我们改变方法。如果您有这样一个查询:

"SELECT * FROM table WHERE id = ? AND name = ?"
更换?变成

"SELECT * FROM table WHERE id = {0} AND name = {1}"
关于set方法,这些方法必须将新参数保存在对象数组中,再次与索引匹配

Object parameterArray = new Object[1];

public boolean setString(int paramIndex, String param) {
    if(paramIndex < 0 || paramIndex > parameterArray.length)
        throw new IllegalArgumentException("Can't set parameter " + paramIndex + ", The query only has " + parameterArray.length + " parameters."); 
    parameterArray[paramIndex - 1] = param;
}

format方法将替换括号之间的数字表示的索引中相应元素的{number}子字符串。

因为您正在编写自己的驱动程序,所以可以稍微使用类。让我们改变方法。如果您有这样一个查询:

"SELECT * FROM table WHERE id = ? AND name = ?"
更换?变成

"SELECT * FROM table WHERE id = {0} AND name = {1}"
关于set方法,这些方法必须将新参数保存在对象数组中,再次与索引匹配

Object parameterArray = new Object[1];

public boolean setString(int paramIndex, String param) {
    if(paramIndex < 0 || paramIndex > parameterArray.length)
        throw new IllegalArgumentException("Can't set parameter " + paramIndex + ", The query only has " + parameterArray.length + " parameters."); 
    parameterArray[paramIndex - 1] = param;
}

format方法将替换括号之间的数字表示的索引中相应元素的{number}子字符串。

什么编程语言?也许是爪哇。哪个数据库?这与regex有什么关系?@bw_üezi使用java编程语言你说的注入是什么意思,你的意思是想从变量中提取像val1这样的东西?是的,Jon Lin selectSqlQuery=SELECT*from customer,其中f1=val1,f2=val2,f3>108;什么编程语言?也许是爪哇。哪个数据库?这与regex有什么关系?@bw_üezi使用java编程语言你说的注入是什么意思,你的意思是想从变量中提取像val1这样的东西?是的,Jon Lin selectSqlQuery=SELECT*from customer,其中f1=val1,f2=val2,f3>108;是的,我正在编写我自己的jdbc驱动程序,但目前我只对PrepareStatement实现这一部分感兴趣是的,我正在编写我自己的jdbc驱动程序,但目前我只对PrepareStatement实现这一部分感兴趣谢谢,但这种方法只适用于第一次调用。例如,如果我调用setTring1,val1,在它之后,如果我第二次调用settring2,val2,它会将val2设置为age,因为现在在sql中只有两个?@user1686222你是对的,我有另一个想法。让我更新我的帖子。谢谢,但是这个方法只适用于第一次调用。例如,如果我调用setTring1,val1,在它之后,如果我第二次调用settring2,val2,它会将val2设置为age,因为现在在sql中只有两个?@user1686222你是对的,我有另一个想法。让我更新我的帖子。