java-如何注入自定义PreparedStatement的参数
我正在尝试实现PreparedStatement,它不适用于sql DB 假设我有以下sql查询: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")
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你是对的,我有另一个想法。让我更新我的帖子。