2014-10-09 55 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); 
     } 
    } 

} 
相關問題