2013-06-20 75 views
1

这是我的SQL连接类的代码,我收到错误消息。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不知道如何在LogModel上设置对象。我的建议是将其分解为SQL原语,以便知道如何处理它。

您的代码需要很多工作。您没有正确关闭JDBC资源。你的LogAction类没有意义。这一小部分代码很有问题。我会担心你的应用程序。

+0

当我使用列表而不是列表和alist.add(log.getUsername),alist.add(log.getPassword)而不是alist.add(日志),然后一切工作正常。 – Maninder

+0

所以接受答案... – duffymo

+0

好酷感谢人 – Maninder