簡體   English   中英

Java.sql.SQLException:參數索引超出范圍2> 1

[英]Java.sql.SQLException: Parameter index out of range 2> 1

我一直在收到此錯誤,但我不知道是什么原因引起的。

這是我想到的一個簡單的電子郵件自動回復Java。 我將連接到表中有兩列的數據庫。 rEmail和sEmail,收件人...發件人。

因此,如果接收方和發送方匹配我對Java代碼所做的檢查,它將自動回復電子郵件,但我一直收到此SQL錯誤,我不知道它是怎么回事。以下是我的代碼。

public class TestList
  extends TestMatch
{

  private Collection senders;

  public void init()
    throws MessagingException
  {

  }

  public Collection match(Mail mail) throws MessagingException
  {
Connection conn = null;
Statement stmt = null;
try
{
  Class.forName("com.mysql.jdbc.Driver");

  conn = DriverManager.getConnection("jdbc:mysql://localhost/mail", "root", "password");

  stmt = conn.createStatement();

  String receiver = mail.getRecipients().toString();
  String sender = mail.getSender().toString();

  String receiverResult = receiver.substring(receiver.indexOf("[") + 1, receiver.indexOf("]"));

  String sql = "SELECT senderEmail FROM TestList where rEmail='"+ rResult +"'" + " AND sEmail='"+sender+"'";
  System.out.println("SQL ERROR Here -- 31");

  ResultSet rs = stmt.executeQuery(sql);

  this.senders = new HashSet();
  while (rs.next()) {
    this.senders.add(new MailAddress(rs.getString("sEmail")));
  }

  rs.close();
  stmt.close();
  conn.close(); 
}
catch (SQLException se)
{
  se.printStackTrace();
}
catch (Exception e)
{
  e.printStackTrace();
}
finally
{
  try
  {
    if (stmt != null) {
      stmt.close();
    }
  }
  catch (SQLException se2) {}
  try
  {
    if (conn != null) {
      conn.close();
    }
  }
  catch (SQLException se)
  {
    se.printStackTrace();
  }
}   
    System.out.println("SQL ERROR Here -- 72);
if (this.senders.contains(mail.getSender())) {  
    System.out.println("SQL ERROR Here -- 74");
    Properties props = new Properties();
    Session session = Session.getDefaultInstance(props);
    MimeMessage msg = new MimeMessage(session);

        System.out.println("auto reply");
        msg.setSubject ("subject");
        msg.setSender (new InternetAddress("Postmaster@test.com"));
        msg.setRecipient(Message.RecipientType.TO,(new InternetAddress("user1@captcha.com")));
        msg.setText ("describe the mail text of","utf-8","Plain");
        Transport.send(msg);
        System.out.println("e-mail sent.");

  return mail.getRecipients();
} else {
return null;
}
  }
}

這個東西會運行兩次,我也不知道為什么還要這么做。 起初,一切都會順利進行,直到發送電子郵件為止,然后再重復一次,並在SQL錯誤--72處停止。

我已經嘗試了好幾天,所以有人可以幫忙嗎?

=====使用rs.getString(1)或rs.getString(2)之后更新新錯誤;

`SQL ERROR Here -- line 31
 java.sql.SQLException: Column Index out of range, 2 > 1.
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
    at com.mysql.jdbc.ResultSetImpl.checkColumnBounds(ResultSetImpl.java:818)
    at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5651)
    at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5570)
    at org.apache.james.transport.matchers.SenderIsGreyList.match(SenderIsGreyList.java:59)
    at org.apache.james.transport.LinearProcessor.service(LinearProcessor.java:357)
    at org.apache.james.transport.JamesSpoolManager.process(JamesSpoolManager.java:405)
    at org.apache.james.transport.JamesSpoolManager.run(JamesSpoolManager.java:309)
    at java.lang.Thread.run(Thread.java:745)
SQL ERROR Here -- line 72`

似乎您正在嘗試從結果集中的行中檢索名為“ sEmail”的列...

  rs.getString("sEmail")

但是您的查詢不會返回該名稱的列。 SELECT語句返回一個名為“ senderEmail”的列。

我總是使用數字。 使用1來獲取第一列,例如

  rs.getString(1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM