源代码如下,程序中用prepareStatement发生一个奇怪的错误(在主函数main处),请帮忙看看是什么原因:public class DBAccessConnection { private final static String driver; private final static String url; private Connection connection; private Statement statement; private PreparedStatement preparedStatement; private volatile static DBAccessConnection accConn; static { 
driver = "sun.jdbc.odbc.JdbcOdbcDriver"; 
url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};" 
+ "DBQ=olts.mdb"; 
// pool=new ConnectionPool(); 
} /** 
* 作用:单例数据库 

* @throws SQLException 
*            无法连接数据库 
* @throws ClassNotFoundException 
*            驱动程序不存在 
*/ 
private DBAccessConnection() throws SQLException, ClassNotFoundException { 
Class.forName(driver); 
connection = DriverManager.getConnection(url); 
statement = connection.createStatement(); 
} /** 
* 作用:创建新的连接 

* @throws SQLException 
*            无法连接数据库 
* @throws ClassNotFoundException 
*            驱动程序不存在 
*/ 
private void createConnection() throws SQLException, ClassNotFoundException { 
if (null == connection) { 
Class.forName(driver); 
connection = DriverManager.getConnection(url); 
statement = connection.createStatement(); 

} /** 
* 作用:获取数据库连接 

* @throws SQLException 
*            无法连接数据库 
* @throws ClassNotFoundException 
*            驱动程序不存在 
*/ 
public static DBAccessConnection getInstance() throws SQLException, 
ClassNotFoundException { 
if (accConn == null) { 
synchronized (DBAccessConnection.class) { 
accConn = new DBAccessConnection(); 


return accConn; 
} /** 
* 作用:更新数据库 

* @param sql 
*            更新语句 
* @throws SQLException 
*            无法连接数据库或语句的语法错误 
* @throws ClassNotFoundException 
*            驱动程序不存在 
*/ 
public void executeUpdate(String sql) throws SQLException, 
ClassNotFoundException { 
if (null == connection) { 
createConnection(); 

statement.executeUpdate(sql) ; 
} /** 
* 作用:更新数据库 

* @throws SQLException 
*            无法连接数据库或语句的语法错误 
* @throws ClassNotFoundException 
*            驱动程序不存在 
*/ 
public void executeUpdate() throws SQLException, 
ClassNotFoundException { 
preparedStatement.executeUpdate(); 
} /** 
* 作用:查询数据库 

* @param sql 
*            查询语句 
* @return 查询结果 
* @throws SQLException 
*            无法连接数据库或查询语句的语法错误 
* @throws ClassNotFoundException 
*            驱动程序不存在 
*/ 
public ResultSet executeQuery(String sql) throws SQLException, 
ClassNotFoundException { 
if (null == connection) { 
createConnection(); 

ResultSet rs = statement.executeQuery(sql); 
return rs; 
} /** 
* 作用:查询数据库 

* @param sql 
*            查询语句 
* @return 查询结果 
* @throws SQLException 
*            无法连接数据库或查询语句的语法错误 
* @throws ClassNotFoundException 
*            驱动程序不存在 
*/ 
public ResultSet executeQuery() throws SQLException, 
ClassNotFoundException { 
if (null == connection) { 
createConnection(); 

ResultSet rs = preparedStatement.executeQuery(); 
return rs; 
} /** 
* 作用:关闭数据库连接 

*/ 
public void close() throws SQLException { 
if (null != preparedStatement) { 
preparedStatement.close(); 
preparedStatement = null; 

if (null != statement) { 
statement.close(); 
statement = null; 

if (null != connection && !connection.isClosed()) { 
connection.close(); 
connection = null; 
} } /** 
* 作用:准备并分析语句 

* @param sql 
* @throws SQLException 
*/ 
public void prepare(String sql) throws SQLException{ 
preparedStatement=connection.prepareStatement(sql); 
} public void prepareStatement(int index, String str) throws SQLException { 
preparedStatement.setString(index, str); 
} public void prepareStatement(int index, byte value) throws SQLException { 
preparedStatement.setByte(index, value); 
} public void prepareStatement(int index, short value) throws SQLException { 
preparedStatement.setShort(index, value); 

/* 
public void prepareStatement(int index, long value) throws SQLException { 
preparedStatement.setLong(index, value); 
}*/ public void prepareStatement(int index, float value) throws SQLException { 
preparedStatement.setFloat(index, value); 

public void prepareStatement(int index, double value) throws SQLException { 
preparedStatement.setDouble(index, value); 

public void prepareStatement(int index, boolean value) throws SQLException { 
preparedStatement.setBoolean(index, value); 
} public static void main(String[] args) { 
try { 
DBAccessConnection accessConn = DBAccessConnection.getInstance(); 
//accessConn.executeUpdate( "INSERT INTO Item VALUES(8,2,3,2,2,'1211?','455')");//这一句能正常运行 accessConn.prepare("INSERT INTO Item VALUES(?,?,?,?,?,?,?)"); 
accessConn.prepareStatement(1, 5); 
accessConn.prepareStatement(2, 1); 
accessConn.prepareStatement(3, 1); 
accessConn.prepareStatement(4, 1); 
accessConn.prepareStatement(5, 1); 
accessConn.prepareStatement(6, "1+1=?"); 
accessConn.prepareStatement(7, "2"); 
accessConn.executeUpdate();//不加下面一段,这一句不起作用                           /**这一段加上去就正常了,奇怪 
accessConn.prepare("select * from item"); 
ResultSet rs = accessConn.executeQuery(); 
while (rs.next()) { 
int id = rs.getInt("ItemID"); 
System.out.println(id + "\t"); 
}*/ 
} catch (Exception e) { 
e.printStackTrace(); 
} }