2015-05-03 5 views
1

Я пытаюсь сделать мой код работать гладко, но после первой вставки и когда существует таблица, я всегда получаю эту ошибку com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'bus' already exists также после создания таблицы fisr и вставки данных эта ошибка возникает ?! Я хочу просто проверить, существует ли таблица, если не создать табу и вставить данные, если да, просто обновите данные.com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: таблица «bus» уже существует

База данных Класс:

package org.busTracker.serverSide; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 

public class Database { 

    public void connection() { 
     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
      System.out.println("jar works :) "); 

     } catch (ClassNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

    public void insertData(String mac, int route, float latitude, 
      float longitude) { 

     connection(); 
     String host = "jdbc:mysql://localhost/busTracker"; 
     String user = "root"; 
     String password = ""; 

     try { 
      Connection con = DriverManager.getConnection(host, user, password); 

      // Create a statement 
      Statement stt = con.createStatement(); 

      // Check whether table exists. 
      boolean rest = stt.execute("SHOW TABLES like 'bus' "); 

      if (rest) { 

       PreparedStatement prep = con 
         .prepareStatement("REPLACE INTO bus(mac, route, latitude, longitude)" 
           + "VALUES(?, ?, ? , ?)"); 
       prep.setString(1, mac); 
       prep.setInt(2, route); 
       prep.setFloat(3, latitude); 
       prep.setFloat(4, longitude); 
       prep.executeQuery(); 

      } else { 

       // Create bus table 
       stt.execute("CREATE TABLE bus" 
         + "(id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY," 
         + "mac VARCHAR(30) NOT NULL UNIQUE," 
         + "route int(11) NOT NULL," 
         + "latitude FLOAT(10,6) NOT NULL," 
         + "longitude FLOAT(10,6) NOT NULL," 
         + "created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)"); 

       PreparedStatement prep = con 
         .prepareStatement("REPLACE INTO bus(mac, route, latitude, longitude)" 
           + "VALUES(?, ?, ? , ?)"); 
       prep.setString(1, mac); 
       prep.setInt(2, route); 
       prep.setFloat(3, latitude); 
       prep.setFloat(4, longitude); 
       prep.executeQuery(); 

      } 

     } catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

} 

ответ

2

Вы можете использовать CREATE TABLE IF NOT EXISTS синтаксис

https://dev.mysql.com/doc/refman/5.5/en/create-table.html

Это ГПУ избежать таких ошибок

Но я бы, если бы проверить

boolean rest = stt.execute("SHOW TABLES like 'bus' "); 

Работает правильно, вы можете получить неправильный результат и выполнить неправильную операцию

+0

Да с 'CREATE TABLE if NOT EXISTS' работает правильно. –

+0

Если это помогло вам не стесняйтесь пометить ответ как правильный (: – lopushen

+0

Также см. Правильный способ проверки наличия таблицы http://stackoverflow.com/questions/2942788/check-if-table-exists – lopushen

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