将值从 JTable 插入到 MySQL



我是新来的,需要你的帮助...

我只是一个初学者,所以请耐心等待代码中的任何愚蠢之处。

我做了一个关于铁路管理系统的项目,想将文本字段和java表中的值插入MySQL数据库。如何摆脱此错误?"列索引超出范围,3>1 ">

这是我写的代码:

      try{
  Class.forName("java.sql.Driver");
  con=DriverManager.getConnection("jdbc:mysql://localhost/railway","root","ridhi");
  st =con.createStatement();
  String sourcee =(String) cb1.getSelectedItem();
  String desti =(String) cb2.getSelectedItem();
  String art =(String) cb3.getSelectedItem();
  String tic= tick.getText();
  String rdate=frm.getText();
  String rdatde=to.getText();
  String rdagte=bp.getText();
  String rdagtge=ru.getText();
  String ddate=date.getText();
  String pnr=l1.getText();
  String q="INSERT INTO pnr values("+l1.getText()+","+cb1.getSelectedItem()+","+"'"+cb2.getSelectedItem()+"'"+","+"'"+frm.getText()+"'"+","+"'"+to.getText()+"'"+","+"'"+date.getText()+"'"+","+"'"+cb3.getSelectedItem()+"'"+","+"'"+ru.getText()+"'"+","+"'"+bp.getText()+"'"+","+tick.getText()+");";
  st.executeUpdate(q);
  while(rs.next()){
     model.getRow(new Object[]{
        rs.getInt(11),rs.getString(12),rs.getInt(13), rs.getString(14),
        rs.getString(15), rs.getString(16) 
               }  );   }
         }
  catch(Exception e){
    JOptionPane.showMessageDialog(null,e.getMessage());
        }

     error: 
    java.sql.SQLException: Column count doesn't match value count at row 1
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2536)
    at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1564)
    at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1485)
    at reservation.reservationActionPerformed(reservation.java:348)
    at reservation.access$100(reservation.java:21)
    at reservation$2.actionPerformed(reservation.java:244)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
    at java.awt.Component.processMouseEvent(Component.java:6216)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
    at java.awt.Component.processEvent(Component.java:5981)
    at java.awt.Container.processEvent(Container.java:2041)
    at java.awt.Component.dispatchEventImpl(Component.java:4583)
    at java.awt.Container.dispatchEventImpl(Container.java:2099)
    at java.awt.Component.dispatchEvent(Component.java:4413)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4556)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4220)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4150)
    at java.awt.Container.dispatchEventImpl(Container.java:2085)
    at java.awt.Window.dispatchEventImpl(Window.java:2475)
    at java.awt.Component.dispatchEvent(Component.java:4413)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

根据这篇文章,当您插入具有更多列的表中时,会发生这种类型的错误,然后您为其提供值; 如果发生这种情况,您必须按名称在括号中引用它们:

INSERT INTO tablen_name (column1_name, column2_name, (more column names), column16_name) 
VALUES(value1, value2, (more values), value16);

我假设也许你也有一个你没有插入并且不是自动生成的 id?还是其他一些专栏?

此外,作为建议,在插入语句中,您不需要手动编写所有这些变量,您可以使用上面所做的引用,例如替换l1.getText((使用PNR等。(这不会导致错误,但由于您刚刚编写了它们,因此最好使用它们(。

代码如下所示:

 String q="INSERT INTO pnr(source, destination, art, tic, rdate, rdatde, dragte, rdagtge,ddate,pnr)
  values("+pnr+","+sourcee+",'"+      desti+"','"+rdate+"','"+rdatde+"','"+
  ddate+"','"+art+"','"+rdagtge+"','"+rdagte+"',"+tic+");";

考虑到表的列的调用方式与您之前调用变量的方式相同。

将所有

信息放在我之前编写的格式代码中很重要,这应该可以解决问题,我不知道您的列名称和包含值的变量是什么。

最新更新