使用MySQL中的ParameterMetaData获取正确的预准备语句数据类型

时间:2013-01-30 07:02:53

标签: java mysql metadata

我必须从 MySQL 数据库中的预准备语句中获取参数名称和参数数据类型。所以我已经使用了 ParameterMetaData 类。但现在我错了数据类型。这只提供“VARCHAR”数据类型。当我在互联网上搜索这个查询时,我找到了

  

“返回参数类型。如果数据类型未知,则返回java.sql.Types.VARCHAR”。

现在我该怎么做才能获得正确的数据类型。请尽可能帮助我。

这是我的代码: -

public class Main {
      public static void main(String[] args) throws Exception {
        Connection conn = getMySqlConnection();

        String query = "select * from survey where id > ? and name = ?";
        PreparedStatement pstmt = conn.prepareStatement(query);
        ParameterMetaData paramMetaData = pstmt.getParameterMetaData();
        if (paramMetaData == null) {
          System.out.println("db vendor does NOT support ParameterMetaData");
        } else {
          System.out.println("db vendor supports ParameterMetaData");
          String paramTypeName = paramMetaData.getParameterTypeName(1);
          String paramTypeName1 = paramMetaData.getParameterTypeName(2);
          System.out.println("param SQL type name=" + paramTypeName);
          System.out.println("param SQL type name1=" + paramTypeName1);

        }

        pstmt.close();
        conn.close();

      }


    public static Connection getMySqlConnection() throws Exception {
        String driver = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://localhost:3306/test?generateSimpleParameterMetadata=true";
        String username = "root";
        String password = "";
        Class.forName(driver);
        Connection conn = DriverManager.getConnection(url, username, password);
        return conn;
      }

这是输出: -

  

param SQL type name = VARCHAR
   param SQL类型name1 = VARCHAR

但我期待这个输出: -

  

param SQL type name = INTEGER
   param SQL类型name1 = VARCHAR

提前致谢

1 个答案:

答案 0 :(得分:0)

要获得完整结果,请使用getParameterClassName(int param)代替getParameterTypeName

参考:http://docs.oracle.com/javase/7/docs/api/java/sql/ParameterMetaData.html#getParameterClassName%28int%29

希望这有帮助