gpt4 book ai didi

Java JDBC 语法错误

转载 作者:行者123 更新时间:2023-12-01 08:06:00 25 4
gpt4 key购买 nike

我有这个方法来加载对象,但是当我运行 sql 代码时,它给了我一个语法错误。

public void loadObjects() {
Statement s = setConnection();

// Add Administrators
try {
ResultSet r = s.executeQuery("SELECT * FROM Administrator;");
while (r.next()) {
Administrator getUser = new Administrator();
getUser.ID = r.getString(2);

ResultSet r2 = s.executeQuery("SELECT * FROM Userx WHERE ID= {" + getUser.ID + "};");
getUser.name = r2.getString(2);
getUser.surname = r2.getString(3);
getUser.PIN = r2.getLong(4);

JBDeveloping.users.administrators.add(getUser);
}
} catch (Exception e) {
System.out.println(e);
}

}

我已经尝试按照其他问题中所述插入大括号,但我要么做错了,要么不起作用。此方法应该能够加载所有管理员,但我相信它只插入了一半的 ID。它获取的ID,由数字和字符组成;例如“26315G”

错误 -com.microsoft.sqlserver.jdbc.SQLServerException:“26315”附近的语法不正确。

编辑-

private java.sql.Connection setConnection(){
java.sql.Connection con = null;
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String url = "jdbc:sqlserver://" + host + ";DatabaseName=" + database + ";integratedSecurity=true;";
con = DriverManager.getConnection(url, username, password);
} catch(Exception e) {
System.out.println(e);
}
return con;
}

public void loadObjects() {
java.sql.Connection con = setConnection();

// Add Administrators
try {
PreparedStatement sql = con.prepareStatement("SELECT * FROM Administrator");
ResultSet rs = sql.executeQuery();
while (rs.next()) {
Administrator getUser = new Administrator();
getUser.ID = rs.getString(2);

PreparedStatement sql2 = con.prepareStatement("SELECT * FROM Userx WHERE ID=?");
sql2.setString(1, getUser.ID);
ResultSet r2 = sql2.executeQuery();

getUser.name = r2.getString(2);
getUser.surname = r2.getString(3);
getUser.PIN = r2.getLong(4);

JBDeveloping.users.administrators.add(getUser);
}
} catch (Exception e) {
System.out.println(e);
}

}

最佳答案

实际上这不是 JDBC 中的方法。这样,即使你对语法错误进行了排序,你的代码也很容易受到 sql 注入(inject)攻击。

正确的方法是:

// Let's say your user id is an integer

PreparedStatement stmt = connection.prepareStatement("select * from userx where id=?");
stmt.setInt(1, getUser.ID);
ResultSet rs = stmt.executeQuery();

这样您就可以防止任何在应用程序请求参数中注入(inject) SQL 的尝试

关于Java JDBC 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21604580/

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