源代码如下,程序中用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();
} }
}
解决方案 »
- 用java做ATM取款机
- 隆重推出一套书,能有免费培训的!!!
- 跪求那位大哥能帮小弟做个《学生管理信息系统》,感激不尽
- 求一个最简单的字符串打印程序
- org.apache.commons.logging.Log;org.apache.commons.logging.LogFactory;类的API文档在哪可以下载啊
- protected成员的访问方法
- JTextField 添加 ActionListener的问题
- 我是Java菜鸟,刚开始学,Java是怎么编辑的里面的程序都看不懂,哪位大神能教教我啊!
- web项目部署到阿里云linux服务器后,连接mysql出现问题
- final关键字,想请问一下下面的为什么是TRUE
- 请大家来看看这个代码
- 初学JAVA,一个简单的编程题。
全角问号??
'1211?'还有这样的用法?insert 就不要executeUpdate了
语句就没什么反应了。
你说的那个语句能正常运行