Java &引用;参数太少”;错误,即使在输入兼容的数据类型时也是如此

Java &引用;参数太少”;错误,即使在输入兼容的数据类型时也是如此,java,ms-access,ms-access-2007,jdbc-odbc,Java,Ms Access,Ms Access 2007,Jdbc Odbc,我正在使用JDK 7、Access 2007和Microsoft数据库引擎2010做一个测试应用程序。 当我通过Java定义了一个带有“REAL”数据类型字段的表,并输入Float或Double时,它说 [Microsoft][ODBC Microsoft Access驱动程序]参数太少。预期1 但如果我直接输入数字,它就会接受。我应该使用什么字段类型?使用DDL定义为REAL的列将在Access中创建为“Number(Single)”,它对应于JDBC中的Float。因此,您需要使用.setF

我正在使用JDK 7、Access 2007和Microsoft数据库引擎2010做一个测试应用程序。 当我通过Java定义了一个带有“REAL”数据类型字段的表,并输入Float或Double时,它说

[Microsoft][ODBC Microsoft Access驱动程序]参数太少。预期1


但如果我直接输入数字,它就会接受。我应该使用什么字段类型?

使用DDL定义为
REAL
的列将在Access中创建为“Number(Single)”,它对应于JDBC中的
Float
。因此,您需要使用
.setFloat()
为该列设置参数值,如中所示

String sql=“插入到TableName(RealField)值(?);
PreparedStatement ps=con.prepareStatement(sql);
ps.setFloat(1,3.14F);
这是适用于我的完整测试代码:

import java.sql.*;
公共类JDBCQuery{
公共静态void main(字符串参数[]){
String connectionString=“jdbc:odbc:DRIVER={Microsoft Access驱动程序(*.mdb)};”
+“DBQ=C:/Users/Public/mdbTest.mdb;”;
字符串tableName=“zzzJavaTest”;
字符串sql;
try(Connection con=DriverManager.getConnection(connectionString)){
sql=String.format(
“删除表[%s]”,
表名);
try(语句s=con.createStatement()){
试一试{
s、 执行更新(sql);
System.out.println(“旧表已删除”);
}捕获(SQLE异常){
如果(例如getMessage().endsWith(“不存在”)){
System.out.println(“表以前不存在”);
}否则{
投掷e;
}
}
}捕获(例外e){
e、 printStackTrace(系统输出);
系统出口(0);
}
sql=String.format(
“创建表[%s](id计数器主键,numfield REAL)”,
表名);
try(语句s=con.createStatement()){
s、 执行更新(sql);
System.out.println(“创建了新表”);
}捕获(例外e){
e、 printStackTrace(系统输出);
系统出口(0);
}
sql=String.format(
“插入[%s](numfield)值(?)”,
表名);
try(PreparedStatement ps=con.preparest陈述(sql)){
ps.setFloat(1,3.14F);
ps.executeUpdate();
System.out.println(“添加了新行”);
}捕获(SQLE异常){
e、 printStackTrace(系统输出);
系统出口(0);
}
}捕获(例外e){
e、 printStackTrace(系统输出);
系统出口(0);
}
}
}

请发布stacktrace和任何相关代码片段。这将帮助我们理解和诊断问题。寻求调试帮助的问题(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。看见