Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;java.sql.SQLException:一般错误;即使插入有效_Java_Sql_Ms Access_Odbc_Sqlexception - Fatal编程技术网

&引用;java.sql.SQLException:一般错误;即使插入有效

&引用;java.sql.SQLException:一般错误;即使插入有效,java,sql,ms-access,odbc,sqlexception,Java,Sql,Ms Access,Odbc,Sqlexception,我正在执行一个程序,即使insert指令正常工作并且DB(Microsoft Access)中的所有内容都正常,以下代码也会引发此异常,这根本没有帮助: 插入到Prespuesto(Id_cliente,Id_prespuesto,Reserva)值中(1234,false) 插入到Prespuesto(Id_cliente,Id_prespuesto,Reserva)值中(1234,false) java.sql.SQLException:一般错误 位于sun.jdbc.odbc.JdbcOd

我正在执行一个程序,即使insert指令正常工作并且DB(Microsoft Access)中的所有内容都正常,以下代码也会引发此异常,这根本没有帮助:
插入到Prespuesto(Id_cliente,Id_prespuesto,Reserva)值中(1234,false)
插入到Prespuesto(Id_cliente,Id_prespuesto,Reserva)值中(1234,false)
java.sql.SQLException:一般错误
位于sun.jdbc.odbc.JdbcOdbc.createSQLException(未知源)
位于sun.jdbc.odbc.JdbcOdbc.standardError(未知源)
位于sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(未知源)
位于sun.jdbc.odbc.JdbcOdbcStatement.execute(未知源)
位于sun.jdbc.odbc.JdbcOdbcStatement.executeUpdate(未知源)
在datos.AccesoBD.insertapusuesto(AccesoBD.java:137)
在aplicaciones.capaapplicion.insertapurpuesto(capaapplicion.java:81)
在Interfaces.nuevopprespuesto$2.actionPerformed(nuevopprespuesto.java:103)
在javax.swing.AbstractButton.fireActionPerformed(未知源)
位于javax.swing.AbstractButton$Handler.actionPerformed(未知源)
在javax.swing.DefaultButtonModel.fireActionPerformed(未知源)
位于javax.swing.DefaultButtonModel.setPressed(未知源)
位于javax.swing.plaf.basic.BasicButtonListener.mouseReleased(未知源代码)
位于java.awt.Component.ProcessMouseeEvent(未知源)
位于javax.swing.JComponent.ProcessMouseeEvent(未知源)
位于java.awt.Component.processEvent(未知源)
位于java.awt.Container.processEvent(未知源)
位于java.awt.Component.dispatchEventImpl(未知源)
位于java.awt.Container.dispatchEventImpl(未知源)
位于java.awt.Component.dispatchEvent(未知源)
位于java.awt.LightweightDispatcher.RetargetMouseeEvent(未知源)
位于java.awt.LightweightDispatcher.ProcessMouseeEvent(未知源)
位于java.awt.LightweightDispatcher.dispatchEvent(未知源)
位于java.awt.Container.dispatchEventImpl(未知源)
位于java.awt.Window.dispatchEventImpl(未知源)
位于java.awt.Component.dispatchEvent(未知源)
位于java.awt.EventQueue.dispatchEventImpl(未知源)
位于java.awt.EventQueue.access$200(未知源)
在java.awt.EventQueue$3.run处(未知源)
在java.awt.EventQueue$3.run处(未知源)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(未知源)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(未知源)
在java.awt.EventQueue$4.run处(未知源)
在java.awt.EventQueue$4.run处(未知源)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(未知源)
位于java.awt.EventQueue.dispatchEvent(未知源)
位于java.awt.EventDispatchThread.pumpOneEventForFilters(未知源)
位于java.awt.EventDispatchThread.pumpEventsForFilter(未知源)
位于java.awt.EventDispatchThread.pumpEventsForHierarchy(未知源)
位于java.awt.EventDispatchThread.pumpEvents(未知源)
位于java.awt.EventDispatchThread.pumpEvents(未知源)
位于java.awt.EventDispatchThread.run(未知源)
hasta aqui bien
将值(1123.0234,1)插入ProductoPresupuesto(Id_Producto,PrecioUd,Id_PressPuesto,Unidades)中;
hasta aqui bien
将值(2270.0234,1)插入ProductoPresupuesto(Id_Producto,PrecioUd,Id_PressPuesto,Unidades)中

在成功执行的打印语句中,我打印的值在DB中。我检查了数据库,所有的Id都在那里

ProductoPresupuesto有两个外键作为主键,它们从不重复(我的意思是两者同时出现)

在这里您可以看到我的代码:

public void insertaPresupuesto(Presupuesto presu){

    String insert;

    for(int i=0; i<presu.getL().size(); i++){

        insert="INSERT INTO Presupuesto (Id_cliente,ID_Presuspuesto,Reserva) VALUES ("+presu.getC().getID_Cliente()+","+presu.getId()+", "+presu.isReserva()+")";
        Statement stm1;
        try {
            stm1 = conn.createStatement();
            System.out.printf("%s\n",insert);
            stm1.executeUpdate(insert);//THIS IS THE LINE 137



        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();

        }


    }

    for(int i=0; i<presu.getL().size(); i++){
        float precio=presu.getL().get(i).getPrecioProd()-presu.getL().get(i).getRebaja();
        System.out.printf("hasta aqui bien\n");
        insert="INSERT INTO ProductoPresupuesto (Id_Producto,PrecioUd,ID_Presuspuesto,Unidades)  VALUES ("+presu.getL().get(i).getId()+","+precio+","+presu.getId()+","+presu.getUnidades().get(i)+");";

        Statement stm2;
        try {
            stm2 = conn.createStatement();
            System.out.printf("%s\n",insert);
            stm2.executeUpdate(insert);




        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();

        }


    }



}
public void insertapuesto(预存预存预存){
插入字符串;

对于(inti=0;i可以突出显示AccesoBD.java中的第137行吗

datos.AccesoBD.insertapusuesto(AccesoBD.java:137)

这将有助于缩小问题的来源

顺便说一句:我建议您使用PreparedStatements。这样您就可以动态设置参数并避免字符串转义错误。例如:

PreparedStatement ps = con.prepareStatement("INSERT INTO ProductoPresupuesto (Id_Producto,PrecioUd,ID_Presuspuesto,Unidades)  VALUES (?,?,?));
ps.setString(1, param1);
ps.setString(2, param2);
ps.setString(3, param3);
stm1.executeUpdate(insert);是第137行。很抱歉,我没有找到任何选项来突出显示内部代码。@SUNNYben