2013-06-20 1 views
1

Это мой код класса SQL Connection, где я получаю ошибку.java.sql.SQLException: Недопустимое значение аргумента: java.io.NotSerializableException

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; 
    } 
} 
+0

* ModelDriven есть – Maninder

+0

у нас есть трассировка стека? Это исключение бросается, когда программа пытается сериализовать объект класса, который не реализует 'Serializable' –

+0

Является ли' LogModel' сериализуемым? –

ответ

0

Измените код

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; 
} 

модель настройки объект к параметру подготовленного заявления делает ноны смысла.

+0

Используя этот метод, я не могу использовать этот метод для других запросов. – Maninder

+0

@manindersingh Я не знаю, какие другие вопросы вы не разместили. –

+0

Я хочу использовать getData() как универсальный метод для класса LogAction. – Maninder

0

Я уверен, что PreparedStatement не имеет понятия, как setObject на вашем LogModel. Моим советом было бы разложить это на примитивы SQL, чтобы он знал, что с ним делать.

Ваш код требует много работы. Вы не закрываете ресурсы JDBC должным образом. Класс LogAction не имеет смысла. Ломался с этим немного кода. Я буду беспокоиться о вашем приложении.

+0

Когда я вместо списка списка: alist.add (log.getUsername), alist.add (log.getPassword) вместо списка alist.add (log) вместо списка и alist.add (log.getUsername), тогда все работает нормально. – Maninder

+0

Так что принимайте ответ ... – duffymo

+0

ok cool thanks man – Maninder