我在我的prepare语句中遇到错误java.sql.sqlFeatureNotSupportedException.我正在使用MysqL数据库.
以下是我的代码.
class tmp {
public static void main(String arg[]) {
try {
Class.forName("com.MysqL.jdbc.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:MysqL://localhost/sample", "root", "root");
PreparedStatement pst = conn
.prepareStatement("select * from userinfo where firstname in(?)");
String[] Parameter = { "user1", "Administrator" };
Array sqlArray = conn.createArrayOf("VARCHAR", Parameter);
pst.setArray(1, sqlArray);
ResultSet rs = pst.executeQuery();
while (rs.next()) {
System.out.println(rs.getInt(1));
}
} catch (Exception e) {
e.printstacktrace();
}
}
}
解决方法:
对于MysqL –
在MysqL中无法设置数组.
而不是你可以在循环中形成(?,?,..)的查询以及设置值的相同方式.
String[] Parameter = { "user1", "Administrator" };
String query = "select * from userinfo where firstname in (";
String temp = "";
for(i = 0; i < Parameter.length; i++) {
temp += ",?";
}
temp = temp.replaceFirst(",", "");
temp += ")";
query = query + temp;
PreparedStatement pst = conn.prepareStatement(query);
所以查询变成了
select * from userinfo where firstname in (?,?)
并使用循环传递值.
对于甲骨文 –
ArrayDescriptor arrayDescriptor = ArrayDescriptor.createDescriptor("CHAR_ARRAY", conn);
String[] Parameter = { "user1", "Administrator" };
java.sql.Array sqlArray = new oracle.sql.ARRAY(arrayDescriptor, conn, content);
.
.
pstmt.setArray(1, sqlArray);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。