gpt4 book ai didi

java - Mysql 更新似乎有效,但抛出语句关闭错误

转载 作者:行者123 更新时间:2023-11-29 12:26:01 25 4
gpt4 key购买 nike

下面的java代码在运行时抛出此错误:ResultSet关闭后不允许操作。令人好奇的是代码的预期功能正在完成。密码确实改变了,表明该语句确实执行了。不过,最后的“失败”输出似乎表明代码在某处出现异常。有什么想法吗?

private void ChangeSQLPassword(String userName,char[] pass) {
Connection conn = null;
String hashed = "";
String salt = "";
String concat = "";
try {
String url = "jdbc:mysql://localhost:3306/PM";
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(url, "Tempuser", "temppass");
System.out.println("Database connection established");
} catch (Exception e) {
e.printStackTrace();
System.err.println("Cannot connect to database server");
} finally {
if (conn != null) {
try {
System.err.println("Connection not null...");
salt = getSalt();
hashed = sha256(pass,salt);
Statement sta3 = conn.createStatement();
ResultSet rs = sta3.executeQuery("SELECT * FROM pmusers"); //Select users
System.out.println(userName + " " + new String(pass));
while (rs.next() == true) { //Loop through results
if (rs.getString("username").equals(userName)) {
concat = concat.concat("UPDATE pmusers SET Hashed = '" + hashed + "', Salt = '" + salt + "' WHERE Username = '" + userName +"';");
sta3.executeUpdate(concat);
}
}
} catch (Exception e) { /* ignore close errors */
e.printStackTrace();
System.err.println("Failed.");
}
}
}
}

static String sha256(char[] input, String Salt) throws NoSuchAlgorithmException {
MessageDigest mDigest = MessageDigest.getInstance("SHA-256");
byte[] result;
StringBuffer sb = new StringBuffer();
try {
mDigest.update(Salt.getBytes("UTF-8"));
result = mDigest.digest(String.valueOf(input).getBytes("UTF-8"));
for (int i = 0; i < result.length; i++) {
sb.append(Integer.toString((result[i] & 0xff) + 0x100, 16).substring(1));
}
} catch (UnsupportedEncodingException e) {
System.out.println("Encoding failed.");
}

String hashed = org.apache.commons.codec.binary.Base64.encodeBase64URLSafeString(String.valueOf(sb).getBytes());

return hashed;
}

private static String getSalt() throws NoSuchAlgorithmException, NoSuchProviderException {
//Always use a SecureRandom generator
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG", "SUN");
//Create array for salt
byte[] salt = new byte[16];
//Get a random salt
sr.nextBytes(salt);
//return salt
return salt.toString();
}

堆栈跟踪: java.sql.SQLException:结果集关闭后不允许执行操作 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:996) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:935) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:924) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:870) 在 com.mysql.jdbc.ResultSetImpl.checkClosed(ResultSetImpl.java:734) 在 com.mysql.jdbc.ResultSetImpl.next(ResultSetImpl.java:6313) 在 ServerInterface.ChangeSQLPassword(ServerInterface.java:585) 在 ServerInterface.access$300(ServerInterface.java:68) 在 ServerInterface$2.actionPerformed(ServerInterface.java:277) 在 javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 在 javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 在 javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 在 javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 在javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 在 java.awt.Component.processMouseEvent(Component.java:6505) 在 javax.swing.JComponent.processMouseEvent(JComponent.java:3320) 在 java.awt.Component.processEvent(Component.java:6270) 在 java.awt.Container.processEvent(Container.java:2229) 在 java.awt.Component.dispatchEventImpl(Component.java:4861) 在 java.awt.Container.dispatchEventImpl(Container.java:2287) 在 java.awt.Component.dispatchEvent(Component.java:4687) 在java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 在java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) 在java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 在 java.awt.Container.dispatchEventImpl(Container.java:2273) 在java.awt.Window.dispatchEventImpl(Window.java:2719) 在 java.awt.Component.dispatchEvent(Component.java:4687) 在 java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735) 在 java.awt.EventQueue.access$200(EventQueue.java:103) 在 java.awt.EventQueue$3.run(EventQueue.java:694) 在 java.awt.EventQueue$3.run(EventQueue.java:692) 在 java.security.AccessController.doPrivileged( native 方法) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 在 java.awt.EventQueue$4.run(EventQueue.java:708) 在 java.awt.EventQueue$4.run(EventQueue.java:706) 在 java.security.AccessController.doPrivileged( native 方法) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 在 java.awt.EventQueue.dispatchEvent(EventQueue.java:705) 在java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 在 java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 在java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 在java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 在java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 在 java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

失败。

非常感谢!

最佳答案

您正在重复使用sta3:尝试

concat = concat.concat(...
Statement sta4 = conn.createStatement();
sta4.executeUpdate(concat);

关于java - Mysql 更新似乎有效,但抛出语句关闭错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28308361/

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