gpt4 book ai didi

java - 准备好的语句仅在不调试时抛出异常

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:37:42 24 4
gpt4 key购买 nike

我使用这段代码将一些数据插入数据库:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection("jdbc:odbc:war_odbc");
PreparedStatement st =
con.prepareStatement(
"INSERT INTO Actors(FirstName,LastName,Age) VALUES(?,?,?)" );
st.setString(1, "Robert");
st.setString(2, "de Niro");
st.setInt(3,45);
st.executeUpdate();
con.close();

如果我使用调试器并一次只执行一行,一切都会顺利进行。如果我不使用它而只是运行应用程序,我会得到这个异常:

 [Microsoft][ODBC Driver Manager] Invalid string or buffer length
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcConnection.buildTypeInfo(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcConnection.initialize(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)

我使用的是 Windows 7 64 位。我转到管理工具、数据源 (ODBC),并成功测试了它。

最佳答案

最好的解决方案是停止使用 sun 包 ( Why Developers Should Not Write Programs That Call 'sun' Packages ) 中的此类。而且这个驱动真的很老了,它是一个在ODBC调用中转换JDBC调用的type 1驱动。

现在几乎所有的数据库供应商都实现了类型 4 驱动程序。此驱动程序实现将 JDBC 调用直接转换为特定于供应商的数据库协议(protocol)。

也是根据这个documentation这个桥将在 JDK8 中被删除,所以如果你想要一个可移植/适应性强的解决方案,那么使用它是个坏主意。

关于java - 准备好的语句仅在不调试时抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14879537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com