源代码如下,程序中用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();
} }
}
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();
} }
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货