下面的代码是用于循环数据库自动发送邮件到满足条件的用户的,现在数据库里满足条件有3个用户,但它只发了一封邮件给用户,后面几个发送的时候报错了,报错详细如下:
sucess
[email protected]
java.sql.SQLException: [Microsoft][ODBC Driver Manager] Invalid cursor state
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6106)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:6263)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataInteger(JdbcOdbc.java:3211)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataInteger(JdbcOdbcResultSet.java
:5441)
at sun.jdbc.odbc.JdbcOdbcResultSet.getInt(JdbcOdbcResultSet.java:571)
at sun.jdbc.odbc.JdbcOdbcResultSet.getInt(JdbcOdbcResultSet.java:589)
at com.raecom.MailSender.sendData(mailsender.java:151)
at com.raecom.MailSender.run(mailsender.java:71)
at java.lang.Thread.run(Thread.java:536)
--------------------------------------------------------------我的代码如下,请问是什么错误!!try {
String yesterday=null;
yesterday=getPreviousDate(1);
Class.forName(driver);
String accessURL ="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\\Program Files\\Tomcat 4.1\\webapps\\ROOT\\data\\systems.mdb";
Connection conn = DriverManager.getConnection(accessURL);
Statement stmt=conn.createStatemen(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);String sql="SELECT DISTINCT Use_ID FROM roolbook WHERE Cur_Date<>'"+yesterday+"'";
ResultSet rs=stmt.executeQuery(sql);
int i=0;
while(rs.next())
{
useid=rs.getInt("Use_ID");
Statement stmt2=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
String sql1="SELECT Mail FROM employee WHERE EPL_ID="+useid;
ResultSet rs1=stmt2.executeQuery(sql1);
while(rs1.next())
{
tosmaddress=rs1.getString("Mail");
try {
Session session = Session.getInstance(getProperties(), new Authentic());
toAddress = tosmaddress;//发送地址(从rs中得到)
String subject = "this is subject"+i;//邮件主题
String content = "this is content"+i;//邮件内容
String file[] = null;//所有附件(绝对路径)
sendMail(session, tosmaddress, cc, subject,content, file);//发送邮件
System.out.println(tosmaddress);
}
catch (Exception ex)
{
ex.printStackTrace();
}
finally
{
}
}}
}
catch(Exception e){e.printStackTrace();}
sucess
[email protected]
java.sql.SQLException: [Microsoft][ODBC Driver Manager] Invalid cursor state
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6106)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:6263)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataInteger(JdbcOdbc.java:3211)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataInteger(JdbcOdbcResultSet.java
:5441)
at sun.jdbc.odbc.JdbcOdbcResultSet.getInt(JdbcOdbcResultSet.java:571)
at sun.jdbc.odbc.JdbcOdbcResultSet.getInt(JdbcOdbcResultSet.java:589)
at com.raecom.MailSender.sendData(mailsender.java:151)
at com.raecom.MailSender.run(mailsender.java:71)
at java.lang.Thread.run(Thread.java:536)
--------------------------------------------------------------我的代码如下,请问是什么错误!!try {
String yesterday=null;
yesterday=getPreviousDate(1);
Class.forName(driver);
String accessURL ="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\\Program Files\\Tomcat 4.1\\webapps\\ROOT\\data\\systems.mdb";
Connection conn = DriverManager.getConnection(accessURL);
Statement stmt=conn.createStatemen(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);String sql="SELECT DISTINCT Use_ID FROM roolbook WHERE Cur_Date<>'"+yesterday+"'";
ResultSet rs=stmt.executeQuery(sql);
int i=0;
while(rs.next())
{
useid=rs.getInt("Use_ID");
Statement stmt2=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
String sql1="SELECT Mail FROM employee WHERE EPL_ID="+useid;
ResultSet rs1=stmt2.executeQuery(sql1);
while(rs1.next())
{
tosmaddress=rs1.getString("Mail");
try {
Session session = Session.getInstance(getProperties(), new Authentic());
toAddress = tosmaddress;//发送地址(从rs中得到)
String subject = "this is subject"+i;//邮件主题
String content = "this is content"+i;//邮件内容
String file[] = null;//所有附件(绝对路径)
sendMail(session, tosmaddress, cc, subject,content, file);//发送邮件
System.out.println(tosmaddress);
}
catch (Exception ex)
{
ex.printStackTrace();
}
finally
{
}
}}
}
catch(Exception e){e.printStackTrace();}
这句有错误,该驱动不支持这种游标
Statement stmt2=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);换成
Statement stmt2=conn.createStatement();试试