0

我必须从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;
      }

这是给出输出:-

参数 SQL 类型名称= VARCHAR
参数 SQL 类型名称 1= VARCHAR

但我期待这个输出: -

参数 SQL 类型名称 = INTEGER
参数 SQL 类型名称 1= VARCHAR

提前致谢

4

1 回答 1

0

要获得完整的结果,请使用getParameterClassName(int param)而不是getParameterTypeName

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

希望这可以帮助

于 2013-01-30T07:19:41.443 回答