2011-12-15 2 views
3

Я вставляю значения в базу данных, но получаю, что «количество столбцов не соответствует значению счетчика числа при строке1».«Количество столбцов не соответствует количеству значений в строке 1» ошибка в программе

try { 
    Class.forName("com.mysql.jdbc.Driver"); 
    connection = DriverManager.getConnection(connectionURL, "root", "root"); 
    String sql = "insert into login(username,password) values(?,?)"; 
    PreparedStatement pst = connection.prepareStatement(sql); 
    pst.setString(1, username); 
    pst.setString(2, password); 

    int numRowsChanged = pst.executeUpdate(); 
    out.println(" Data has been submitted "); 

    pst.close(); 
} catch (ClassNotFoundException e) { 
    out.println("Couldn't load database driver: " + e.getMessage()); 
} catch (SQLException e) { 
    out.println("SQLException caught: " + e.getMessage()); 
} catch (Exception e) { 
    out.println(e); 
} finally { 
    try { 
     if (connection != null) 
      connection.close(); 
    } catch (SQLException ignored) { 
     out.println(ignored); 
    } 
} 

Это моя таблица в базе данных MySql:

  +----------+-------------+------+-----+---------+-------+ 
      | Field | Type  | Null | Key | Default | Extra | 
      +----------+-------------+------+-----+---------+-------+ 
      | username | varchar(20) | YES |  | NULL |  | 
      | password | varchar(15) | YES |  | NULL |  | 
      +----------+-------------+------+-----+---------+-------+ 

Почему я получаю эту ошибку? Что-то не так в моем коде? Пожалуйста, помогите мне .......

+0

сколько поля у вас есть в таблице входа? – Pratik

+0

Можете ли вы показать нам схему определения таблицы 'login'? –

+0

Возможно, у вас больше полей в вашей таблице входа. –

ответ

0

Возможно, столбцы названы неверными в sql String.

+0

no .. они такие же –

+0

теперь вы можете видеть мою таблицу входа также .... скажите мне сейчас –

+0

no нет свободных пробелов –

0

Ошибка сама по себе ошибочна, возможно, все выглядит нормально. Возможно, первичный ключ таблицы логин не определен (имя пользователя)? Я вижу имя пользователя является допустимым.

+0

нет первичного ключа не определен .. но это не проблема –

+0

Я сделал то же самое, что и вы. И ** все работало **. Разница, возможно, InnoDB (не ISAM) и использование кодировки UTF-8 как для DB, так и для строки подключения драйвера. Если указанная кодировка была UTF-16, можно было бы получить нулевой байт, и это было бы в байтовой кодировке быть концом строки. Немного сомнительно. –

+0

i did not get you –

0

Другой подход, незаготовленный отчет может дать представление.

String sql = "insert into login(username, password) values('" 
     + username + "', '" + password + "')"; 
System.out.println("sql = " + sql); 
Statement pst = connection.createStatement(); 
pst.execute(sql); 

Если ничего не помогает, создать новую таблицу xxx и попробовать все на этом.

+0

метод connectStatement() в подключении типа не применим для аргументов (строка). Эта ошибка am get –

+1

Исправлено; Надеюсь, теперь это правильный java. –

+0

та же ошибка am get –

0

На самом деле эта ошибка возникает, когда количество заданных значений и столбцы номера не совпадают. (i.e) Вставить в таблицу (col1, col2) значения (val1) и Вставить в таблицу (col1) значения (val1, val2) оба будут генерировать ту же ошибку.

Я пробовал ваш код, и он отлично работает с Oracle. Таким образом, вы можете проверить некоторые орфографические ошибки в именах столбцов.

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