源代码如下,程序中用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();
} }
}