java.sql.SQLException: Неверное значение аргумента: java.io.NotSerializableException
Это мой код класса SQL Connection, где я получаю сообщение об ошибке.
public class SqlConnection {
static Connection con;
.......
static public ResultSet getData(String sql, List<LogModel> alist)
throws ClassNotFoundException, SQLException {
PreparedStatement pst = con.prepareStatement(sql);
if (alist != null) {
for (int i = 1; i <= alist.size(); i++) {
pst.setObject(i, alist.get(i-1)); //Exception at this Line
}
}
ResultSet rs = pst.executeQuery();
return rs;
}
}
Здесь LogAction
класс, где я это называю getdata()
функция.
public class LogAction extends ActionSupport implements ModelDriven<LogModel>, Preparable {
LogModel log = null;
List<LogModel> alist = null;
public static final String FAILURE = "failure";
@Override
public void prepare() throws Exception {
log = new LogModel();
alist = new ArrayList<LogModel>();
}
@Override
public LogModel getModel() {
return log;
}
public String login() throws ClassNotFoundException, SQLException {
String sql = "Select username,password from registration where username=? and password=?";
alist.add(log);
System.out.println(alist);
ResultSet rs = SqlConnection.getData(sql, alist);
if (rs.next()) {
return SUCCESS;
} else
return FAILURE;
}
}
2 ответа
Решение
Измените свой код на
static public ResultSet getData(String sql, String username, String password)
throws ClassNotFoundException, SQLException {
PreparedStatement pst = con.prepareStatement(sql);
pst.setString(1, username);
pst.setString(2, password);
ResultSet rs = pst.executeQuery();
return rs;
}
установка объекта модели в параметр подготовленного оператора не имеет смысла.
Я уверен, что PreparedStatement не знает, как установить Object в вашей LogModel. Мой совет - разбить это на примитивы SQL, чтобы он знал, что с ним делать.
Ваш код требует много работы. Вы не закрываете ресурсы JDBC должным образом. Ваш класс LogAction не имеет смысла. Много не так с этим немного кода. Я буду беспокоиться о вашем приложении.