2015-09-10 2 views
3
private final static String INSERT = "INSERT INTO electric_usage" + 
     "(objId, useTime, name, usage) " + 
     "VALUES (?, ?, ?, ?)";  

    public static boolean insertUsage(int index, Timestamp time, String name, double usage) { 
     Connection con = null; 

     try { 
      con = DBManager.getInstance().getConnection(); 

      PreparedStatement stmt = con.prepareStatement(INSERT); 

      java.util.Date today = new java.util.Date(); 


      stmt.setInt(1, index); 
      stmt.setTimestamp(2, time); 
      stmt.setString(3, name); 
      stmt.setDouble(4, usage); 
      stmt.addBatch(); 

      stmt.executeBatch(); 
      stmt.close(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
      return false; 
     } finally { 
      DBManager.getInstance().close(); 
     } 

     return true; 


    } 

делают INSERT запрос, как это, но этот код происходит ошибка синтаксисаJAVA ошибка MySQL INSERT

другой запрос нагрузки отлично работает только в этом ВСТАВИТЬ quert происходят ошибки

им пытаются ВСТАВИТЬ запрос в консоли это происходит такая же ошибка

мой вопрос неправильный?

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'usage) VALUES (192, '2015-09-10 13:55:57', 'test', 0.0045196452704869055)' at line 1 

стол

objId(int length 8 not null) 
useTime(timestamp length 0 not null) 
name (varchar length 255 not null) 
usage (double length 11 not null) 
+0

Вы использовали тот же запрос из базы данных DB Что вы получили? –

+0

@SubodhJoshi 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «индексом, временем, именем, использованием». VALUES (192, '2015-09-10 13:42:56', 'test', 0.01345383 'at строка 1 – user2637015

+0

Моя озабоченность индексом является ключевым словом в mysql, поэтому он жалуется – soorapadman

ответ

1

Это потому, что имена столбцов index/usage являются все MySQL Reserve words и так должно быть экранированы с помощью backtique, как показано ниже

INSERT INTO electric_usage (`index`, `time`, `name`, `usage`) 

Всегда избегать использования имени таблицы/столбца в качестве зарезервируйте слово, иначе вам тоже придется страдать. Используйте правильное соглашение об именах, например префикс t_, для имен таблиц и c_ для имен столбцов.

+0

@ user2637015, 'usage' также является резервным словом. Делайте правильное именование всегда. см. предложение в ответ. – Rahul

0

индекс зарезервированное слово в mysql вы не можете использовать зарезервированные слова mysql. Когда вы пишете запрос в браузере запросов, чем зарезервированные слова отображаются синим цветом. поэтому, пожалуйста, позаботьтесь об этом. Если вы пишете запрос в java-кодировании напрямую, вы не можете найти эти проблемы.