2014-10-09 56 views
1

我正在使用JDK 7,Access 2007和Microsoft数据库引擎2010执行测试应用程序。 通过Java定义一个包含'REAL'数据类型字段的表并且在进入Float或Double时,它表示即使在输入兼容数据类型时,“参数太少”错误

[Microsoft] [ODBC Microsoft Access Driver]参数太少。预计1.

但如果我直接输入数字它接受。我应该使用哪些字段类型?

+0

请张贴堆栈跟踪和任何相关的代码片段。这将有助于我们理解和诊断问题。 – Thihara 2014-10-09 07:32:15

+0

寻求调试帮助的问题(“**为什么不是这个代码工作?”)必须包含所需的行为,特定的问题或错误以及在问题本身**中重现**所需的最短代码。没有**明确问题陈述**的问题对其他读者没有用处。请参见[如何创建最小,完整和可验证示例](http://stackoverflow.com/help/mcve)。 – DavidPostill 2014-10-09 08:09:10

回答

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); 
     } 
    } 

} 
相关问题