【问题标题】:no suitable method found for getDate(Date)没有找到适合 getDate(Date) 的方法
【发布时间】:2014-08-27 19:40:51
【问题描述】:

我想收集一些数据并将其存储到数据库中(在 Java 中,使用 MySQL)。数据之一是日期(创建/插入此条目的时间)。

我已经试过了

private java.util.Date dateUtil = new java.util.Date();
private java.sql.Date dateSQL= new java.sql.Date(dateUtil.getTime());

将日期转换为对 sql 友好的格式,但我仍然收到错误

没有找到适合 getDate(Date) 的方法

方法 ResultSet.getDate(int) 不适用

(参数不匹配;日期不能转换为int)

方法 ResultSet.getDate(String) 不适用

(参数不匹配;日期不能转换为字符串)

错误发生在一行

System.out.println("(" + resSet.getInt(1) + ")"
...
+ resultSet.getDate(dateSQL)
...
);

当我尝试使用时

resultSet.getDate(java.sql.Date(dateSQL.getTime())

resultSet.getDate(java.sql.Date(dateUtil.getTime())

我也遇到了错误:

找不到符号

符号:类 sql

位置:java包

是的,我已经导入了 java.sql.Date 但是 Netbeans 告诉我这个导入是未使用的......

我真的束手无策......有人知道还能做什么吗?

P.S.:float 也有同样的问题:

+ resultSet.getFloat(somefloat)

错误信息:

没有找到适合 getFloat(float) 的方法

方法ResultSet.getFloat(float)不适用

(参数不匹配;可能从 float int 进行有损转换)

方法 ResultSet.getFloat(String) 不适用

(参数不匹配;浮点数不能转换为字符串)

编辑:极简代码 sn-p:

public class sqlTest
{
    public static DBConnection connection = new DBConnection();
    private static PreparedStatement prepStatement;
    private static ResultSet resSet;

    private Date date;
    private float someFloat;
    

    public static void insertExample(Date date, float someFloat)
    {
        connection = (DBConnection) connection.getInstance();
        
        if(connection == null)
        {
            try
            {
                String sql = "INSERT INTO sample(date, someFloat) VALUES(?, ?)";
                
                prepStatement = connection.prepareStatement(sql);
                
                prepStatement.setDate(1, date);
                prepStatement.setFloat(2, someFloat);

                prepStatement.executeUpdate();
                
                String lastSample = "SELECT date, someFloat FROM SAMPLE";
                
                if(resSet.next())
                {
                    System.out.println("(" + resSet.getInt(1) + ")" + resSet.getDate(java.sql.Date(date.getTime())) + " " + resSet.getFloat(someFloat)); //here the error(s) occur
                }
            }
            catch(SQLException sqle)
            {
                logger.log(Level.SEVERE, "SQLException was thrown while inserting sample: ", sqle.getMessage()); 
            }
        }
    }
}

【问题讨论】:

  • 您希望getDate(Date) 做什么? getDate 方法旨在检索结果集中的特定条目作为日期...
  • 查看 ResultSet 的 API 文档:docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html。您会发现没有带有签名 getDate(java.sql.Date) 的方法。
  • 我对 SQL 很陌生。我希望 getDate() 能够获取实际日期并将其插入数据库中......但似乎我错了......
  • 另外,查看您运行的原始 SQL 查询可能会很有用。它可能允许某人帮助您正确使用结果集。
  • 我建议您仔细查看 API 文档和基本 JDBC 教程。

标签: java mysql sql date


【解决方案1】:

首先,要将java.util.Date 持久化到Java 数据库中,您必须将其转换为java.sql.Date

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date myDate = formatter.parse("2006-12-31");
java.sql.Date sqlDate = new java.sql.Date(myDate.getTime());

转换后,您可以使用setDate() of java.sql.PreparedStatement

String sql = "INSERT INTO sample(date, someFloat) VALUES(?, ?)";

PreparedStatement prepStatement = conn.prepareStatement(sql);
PreparedStatement prepStatement1 = conn.prepareStatement("SELECT * FROM sample");
prepStatement.setDate(1, sqlDate);
prepStatement.setFloat(2, 1.0f);

终于可以这样检索了

ResultSet rset = prepStatement1.executeQuery();
while(rset.next())
{
  String date = rset.getDate("date").toString();
  Float f = rset.getFloat("someFloat");
  System.out.println(date +" "+f);
}

【讨论】:

    【解决方案2】:
    1. 您忘记执行获取查询。做类似的事情

      PreparedStatement pstmt = connection.prepareStatement(lastSample);
      resSet = pstmt.executeQuery();
      

    【讨论】:

      【解决方案3】:

      当您获得结果集时,您可能需要考虑这一点:

      您没有在 getDate 方法中指定列索引:

      java.sql.Date result = resSet.getDate(0);
      Float otherFloat = resSet.getDate(1);
      

      但我在您的代码中找不到查询的结果集。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-30
        • 2021-06-19
        • 2015-11-26
        • 2019-09-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多