2013-04-04 2 views
1

Я пытаюсь вставить данные в свою базу данных на SQL и после того, как я запускаю свою программу, произошла ошибка, и говорит:Вставка данных на SQL

[Microsoft][ODBC SQL Server Driver][SQL Server]Insert Error: Column name or number of supplied values does not match table definition. 

как я могу это исправить? может ли кто-нибудь сказать мне, что не так с моими кодами?

здесь коды:

private void btnInsertActionPerformed(java.awt.event.ActionEvent evt) { 
     try { 
     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 

     String url = "jdbc:odbc:****"; 
     String user = "****"; 
     String pass = "****"; 
     Connection connection = DriverManager.getConnection(url, user, pass); 
     Statement statement = connection.createStatement(); 
     String pIDNo = txtPatientID.getText(); 
     String pFName = txtpFName.getText(); 
     String pLName = txtpLName.getText(); 
     String pMI = txtpMI.getText(); 

     String sql = "INSERT INTO dbo.Patients VALUES (" + 
       (pIDNo)+",'"+(pFName)+"','"+(pLName)+"','"+(pMI)+"')"; 
     statement.executeUpdate(sql); 
     JOptionPane.showMessageDialog(rootPane, "Patient Added!"); 
     }catch (Exception ex) { 
      JOptionPane.showMessageDialog(this, ex.getMessage()); 
      System.exit(1); 
     } 
    } 

Вот информация таблица:

PatientTable

+0

Можете ли вы поделиться своей структурой таблиц –

+0

Каковы имена и типы данных в столбцах таблицы? –

+0

Вы должны упомянуть имена столбцов и перед назначением значений в запросе –

ответ

4

При использовании неявной INSERT заявление, число значений, поставляемых должна быть равна общей Кумбер из столбцы в таблице, например

INSERT INTO tableName VALUES (val1, val2) 

В вышеприведенном запросе ожидаемое количество столбцов равно двум, потому что вы предоставили два значения.

Когда есть приращающееся поле, вы должны передать значение null. Но если нет, то вам нужно указать имена столбцов, для которых будут вставлены значения, например

INSERT INTO tableName (col1, col2) VALUES (val1, val2) 

В качестве примечания, значения должны быть настроены параметры, чтобы избежать от sql injection. Смотрите статью ниже:

UPDATE 1

Указание имен столбцов требуется, так как вы не вставляя значения всех столбцов.

INSERT INTO Patients (pIDNo, pFName, pLName, pMI) 
VALUES (...) 
+0

Я изучу Java PreparedStatement, спасибо! Рад узнать, что здесь есть несколько PH ... –

+0

@CrystalMaiden hehe..hey, каковы столбцы в таблице 'Patient'? –

+0

Я размещаю его выше, сэр. Разве вы можете взглянуть на него и сказать мне, что не так? –

1

Какой тип pIDNo, pFName, pLName, pMI?

Измените тип на varchar для получения ввода текста.

+0

как это сделать? – Danjor

+0

Прошу прощения, если я пою, как новичок, но я, вы можете научить меня, как это сделать? – Danjor

0

Возможно, у вас поле идентификатора установлено в auto, поэтому не следует передавать его во вставку? Вы должны указать поля в инструкции insert, например. INSERT INTO dbo.Patients (column1, column2 ...). См. here.

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