我正在使用JDK 7,Access 2007和Microsoft Database Engine 2010进行测试应用程序。 通过Java我定义了一个带有'REAL'数据类型字段的表,并且在输入Float或Double时,它表示
[Microsoft] [ODBC Microsoft Access Driver]参数太少。预计1。
但如果我直接输入数字就接受了。我应该使用哪些字段类型?
答案 0 :(得分:0)
使用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);
}
}
}