1
我正在使用JDK 7,Access 2007和Microsoft数据库引擎2010执行测试应用程序。 通过Java定义一个包含'REAL'数据类型字段的表并且在进入Float或Double时,它表示即使在输入兼容数据类型时,“参数太少”错误
[Microsoft] [ODBC Microsoft Access Driver]参数太少。预计1.
但如果我直接输入数字它接受。我应该使用哪些字段类型?
我正在使用JDK 7,Access 2007和Microsoft数据库引擎2010执行测试应用程序。 通过Java定义一个包含'REAL'数据类型字段的表并且在进入Float或Double时,它表示即使在输入兼容数据类型时,“参数太少”错误
[Microsoft] [ODBC Microsoft Access Driver]参数太少。预计1.
但如果我直接输入数字它接受。我应该使用哪些字段类型?
使用DDL定义为REAL
的列将在Access中创建为“Number(Single)”,对应于JDBC中的Float
。所以,你需要使用.setFloat()
设置你的参数值,该列,如
String sql = "INSERT INTO TableName (RealField) VALUES (?)";
PreparedStatement ps = con.prepareStatement(sql);
ps.setFloat(1, 3.14F);
这是完整的测试代码为我的作品:
import java.sql.*;
public class JDBCQuery {
public static void main(String args[]) {
String connectionString = "jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};"
+ "DBQ=C:/Users/Public/mdbTest.mdb;";
String tableName = "zzzJavaTest";
String sql;
try (Connection con = DriverManager.getConnection(connectionString)) {
sql = String.format(
"DROP TABLE [%s]",
tableName);
try (Statement s = con.createStatement()) {
try {
s.executeUpdate(sql);
System.out.println("Old table dropped.");
} catch (SQLException e) {
if (e.getMessage().endsWith("does not exist.")) {
System.out.println("Table did not previously exist.");
} else {
throw e;
}
}
} catch (Exception e) {
e.printStackTrace(System.out);
System.exit(0);
}
sql = String.format(
"CREATE TABLE [%s] (id COUNTER PRIMARY KEY, numfield REAL)",
tableName);
try (Statement s = con.createStatement()) {
s.executeUpdate(sql);
System.out.println("New table created.");
} catch (Exception e) {
e.printStackTrace(System.out);
System.exit(0);
}
sql = String.format(
"INSERT INTO [%s] (numfield) VALUES (?)",
tableName);
try (PreparedStatement ps = con.prepareStatement(sql)) {
ps.setFloat(1, 3.14F);
ps.executeUpdate();
System.out.println("New row added.");
} catch (SQLException e) {
e.printStackTrace(System.out);
System.exit(0);
}
} catch (Exception e) {
e.printStackTrace(System.out);
System.exit(0);
}
}
}
请张贴堆栈跟踪和任何相关的代码片段。这将有助于我们理解和诊断问题。 – Thihara 2014-10-09 07:32:15
寻求调试帮助的问题(“**为什么不是这个代码工作?”)必须包含所需的行为,特定的问题或错误以及在问题本身**中重现**所需的最短代码。没有**明确问题陈述**的问题对其他读者没有用处。请参见[如何创建最小,完整和可验证示例](http://stackoverflow.com/help/mcve)。 – DavidPostill 2014-10-09 08:09:10