2014-11-24 4 views
0

В настоящее время я пытаюсь отсканировать и проанализировать файл, который не находится в формате sql. Я пытаюсь ввести все данные в таблицу SQL, но по какой-то причине каждый раз, когда я запускаю программу, я получаю сообщение об ошибке, указывающее неизвестный столбец «что» в списке полей. Таким образом, ни одна из данных не проходит. «что» является одним из имен, которые находятся в тексте. В таблице в настоящее время имеется 11 столбцов. Я знаю, что разбираю или сканирую неправильно, но я не могу понять, где. Вот мой код:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException UNKNOWN COLUMN

public class parseTable { 

public parseTable (String name) throws FileNotFoundException 
{ 
    File file = new File(name); 
    parse(file); 
} 

private void parse(File file) throws FileNotFoundException 
{ 
    Connection conn = null; 
    Statement stmt = null; 
    ResultSet rs = null; 

    try{ 
    Class.forName("com.mysql.jdbc.Driver").newInstance(); 
    String connectionUrl = "jdbc:mysql://localhost:3306/"; 
    String connectionUser = ""; 
    String connectionPassword = ""; 
    conn = DriverManager.getConnection(connectionUrl, connectionUser, connectionPassword); 
    stmt = conn.createStatement(); 

    Scanner scan = new Scanner(file); 

    String[] rowInfo = new String[11]; 
    int count = 0; 
    while(scan.hasNextLine()){ 

     //String data = scan.nextLine(); 

     Scanner lineScan = new Scanner(scan.nextLine()); 

     while(lineScan.hasNext()){ 
      String words = lineScan.next(); 
      if(count < 11){ 
       rowInfo[count] = words; 
       count++; 
      } 


      else if(count == 11 && words.equals("States")){ 
       rowInfo[count - 1] = rowInfo[count - 1] + " " + words; 
      } 

      else{ 
       String query = ""; 
       for(int i = 0; i < rowInfo.length; i++) 
       { 
        if(query.equals("")) 
        { 
         query = rowInfo[i]; 
        } 
        else if(i == 9){ 
         query = query + "," + rowInfo[i]; 
        } 

        else if(rowInfo[i].equals(null)){ 
         query = query + ", " + "NULL"; 
        } 

        else 
         query = query + ", " + "'" + rowInfo[i] + "'"; 

       } 

       stmt.executeUpdate("INSERT INTO dup VALUES(" + query + ")"); 

       count = 0; 
       rowInfo = new String[11]; 
      } 
     } 



    } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     try { if (rs != null) rs.close(); } catch (SQLException e) { e.printStackTrace(); } 
     try { if (stmt != null) stmt.close(); } catch (SQLException e) { e.printStackTrace(); } 
     try { if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } 
    } 
} 

}

И это данные, которые я пытаюсь ввести: 1 привет сыр 1111 [email protected] пользователь аой улицы зип, что США 2 Alex сыр 1111 [email protected] user adm street zip what USA

Итак, теперь это мой новый код, используя PrepareStatement. Однако я все еще получаю сообщение об ошибке, и я смотрел онлайн решение, где я делаю ошибку, но я не могу понять, где.

String query = "INSERT INTO mil_table (UserName, NameFirst, NameLast, supportID, EmailAddress, Password, 
       IDQ, AddressCity, AddressState, AddressZip, AddressCountry) VALUES(?,?,?,?,?,?,?,?,?,?,?)"; 

    pstmt = conn.prepareStatement(query); 

    Scanner scan = new Scanner(file); 

    String[] rowInfo = new String[11]; 
    int count = 0; 
    while(scan.hasNextLine()){ 

     //String data = scan.nextLine(); 

     Scanner lineScan = new Scanner(scan.nextLine()); 

     while(lineScan.hasNext()){ 
      String words = lineScan.next(); 
      if(count < 11){ 
       rowInfo[count] = words; 
       count++; 
      } 


      else if(count == 11 && words.equals("States")){ 
       rowInfo[count - 1] = rowInfo[count - 1] + " " + words; 
      } 

      else{ 

       for(int i = 0; i <rowInfo.length; i++) 
       { 
        pstmt.setString(i + 1, rowInfo[i]); 

}

   //stmt.executeUpdate("INSERT INTO mil_table VALUES(" + query + ")"); 
       //System.out.println("@" + query + "@"); 
       pstmt.executeUpdate(); 
       count = 0; 
       rowInfo = new String[11]; 
      } 
     } 
+2

Было бы лучше, если бы вы использовали 'PreparedStatement' и задавали каждый аргумент один за другим, а не объединяли значения и пытались передать все из них без надлежащего удаления, например. 'what! = 'what''. –

+0

@LuiggiMendoza Я попытался использовать подготовленное состояние, но все еще получаю некоторую ошибку. Я смотрел онлайн для информации о подготовке, но мне это действительно не помогло. – Kito

+0

Какое у вас новое исключение? Предоставьте подробную информацию об этом –

ответ

0

Как вы используете MySQL, вам нужно будет приложить текст входа в кавычки. Попробуйте включить значения String, которые вы вставляете в кавычки, а затем выполните свой код.

+0

Это не требуется, это необходимо только в некоторых случаях, таких как использование ключевых слов в качестве имен столбцов. –

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