2014-07-07 3 views
0

Я хочу собрать некоторые данные и сохранить их в базе данных (в Java, используя MySQL). Одной из данных является дата (когда эта запись была создана/вставлена).Не найдено подходящего метода для getDate (Дата)

Я уже пробовал

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

преобразовать дату к SQL-формату, но я все еще получаю ошибку

нет подходящего метода нашел для GetDate (Дата)

метод ResultSet.getDate (int) не применимо

(несоответствие аргумента, дата не может быть преобразована в int)

метод ResultSet.getDate (строка) не применяется

(аргумент несоответствия; Дата не может быть преобразован в строку)

Ошибка возникает в строке

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 говорит мне, что этот импорт не используется ...

Я действительно нахожусь в своем умом ... У кого-нибудь есть идея, что еще делать?

PS: У меня такая же проблема с поплавком:

+ resultSet.getFloat(somefloat) 

Сообщение об ошибке: не

не подходящий метод нашел для GetFloat (флоат)

метод ResultSet.getFloat (float) не применимо

(аргумент несоответствие; возможный потерю конверсии из float int)

способ ResultSet.GetFloat (String) не применяется

(несоответствие аргумент, поплавок не может быть преобразован в строку)

EDIT: минималистский фрагмент кода:

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()); 
      } 
     } 
    } 
} 
+3

Что бы вы ожидали 'getDate (Date)' делать? Метод 'getDate' предназначен для получения определенной записи в результирующем наборе * как * дата ... –

+0

Посмотрите документы API для ResultSet: http://docs.oracle.com/javase/7/docs /api/java/sql/ResultSet.html. Вы не найдете метода с сигнатурой getDate (java.sql.Date). – JamesB

+0

Я совершенно новый для SQL. Я ожидал getDate(), чтобы получить фактическую дату и вставить ее в базу данных ... Но похоже, что я ошибаюсь ... – Hisushi

ответ

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() из 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); 
} 
+0

Большое спасибо, М.Шарма, теперь это работает! – Hisushi

0
  1. Вы забываете выполнить ваш запрос на выборку. Есть ли что-то вроде

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

Когда вы получаете ResultSet вы, возможно, потребуется рассмотреть этот вопрос:

Вы не указали индекс столбца в метод getDate:

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

Но я не смог найти запрос результатов в вашем коде.

Смежные вопросы