В настоящее время я пытаюсь отсканировать и проанализировать файл, который не находится в формате 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];
}
}
Было бы лучше, если бы вы использовали 'PreparedStatement' и задавали каждый аргумент один за другим, а не объединяли значения и пытались передать все из них без надлежащего удаления, например. 'what! = 'what''. –
@LuiggiMendoza Я попытался использовать подготовленное состояние, но все еще получаю некоторую ошибку. Я смотрел онлайн для информации о подготовке, но мне это действительно не помогло. – Kito
Какое у вас новое исключение? Предоставьте подробную информацию об этом –