当前位置: 首页 > 知识库问答 >
问题:

使用Java在Oracle中插入一条记录,其中日期来自jDateChooser,数字为null

罗金林
2023-03-14

这是我第一次在这里发帖,但我真的有麻烦了。

我有一张员工表:

EMPLOYEE_ID非空数(6)

FIRST_NAMEVARCHAR2(20)

LAST\u NAME NOT NULL VARCHAR2(25)

电子邮件不为NULL VARCHAR2(25)

PHONE_NUMBERVARCHAR2(20)

HIRE\u DATE非空日期

JOB_ID不为空VARCHAR2(10)

工资编号(8,2)

委员会PCT编号(2,2)

MANAGER\u ID号(6)

部门ID号(4)

我需要插入下一条记录:

INSERT INTO employees VALUES (307,'Alfredo','Garcia','alfredgad','222222', TO_DATE('07-JUN-1994', 'dd-MON-yyyy'),'AC_ACCOUNT',8300,NULL,205,110);

我有下一个代码:

我的班级Conexion

package nomina;
import java.io.*;
import java.sql.*;
import javax.swing.*;


public class Conexion {

    static Connection conn=null;
    static Statement st=null;
    static ResultSet rs=null;


    static String bd="ORCL";
    static String login="XXXX";
    static String password="XXX";
    static String url="jdbc:oracle:thin:@localhost:1521:ORCL";

    public static Connection Enlace(Connection conn)throws SQLException    {
        try {
         Class.forName("oracle.jdbc.OracleDriver");
         conn=DriverManager.getConnection(url, login, password);
        }
        catch(ClassNotFoundException e )
        {
            System.out.print("Clase no encontrada");
        }
        return conn;
    }

    public static Statement sta(Statement st)throws SQLException    {
        conn=Enlace(conn);
        st=conn.createStatement();
        return st;
    }
    public static ResultSet EnlEst(ResultSet rs)throws SQLException    {
       st=sta(st);
       rs=st.executeQuery("select * from employees");
        return rs;
    }


}

我尝试插入记录的方法:

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         


        int id = 0;
        double salario = 0;
        int jefe = 0;
        int depto = 0;
        String nombre = "", apellidos = "", correo = "", telefono = "", puesto = "";

        id = Integer.parseInt(jTextIdEmpleado.getText());
        apellidos = jTextNom.getText();
        apellidos = jTextApe.getText();
        correo = jTextMail.getText();
        telefono = jTextTel.getText();
        puesto = jTextPuesto.getText();
        salario = Double.parseDouble(jTextSalario.getText());
        jefe = Integer.parseInt(jTextIdJefe.getText());
        depto = Integer.parseInt(jTextDep.getText());

        try {
            // main miconexion = new main();
            conn = Conexion.Enlace(conn);
            Statement sta = conn.createStatement();
            try {

                sta.executeQuery("INSERT INTO employees VALUES (307,'Alfredo','Garcia','alfredgad','222222', TO_DATE('07-JUN-1994', 'dd-MON-yyyy'),'AC_ACCOUNT',8300,NULL,205,110)");
            } catch (SQLException e) {
                System.out.println("error");
                sta.close();
            }
            String sqlinsertar = "insert into employees (employee_id,first_name,last_name,email,phone_number,hire_date,job_id,salary,commission_pct,manager_id,department_id) values (?,?,?,?,?,?,?,?,?,?,?,?)";
            PreparedStatement psta = conn.prepareStatement(sqlinsertar);
            psta.setInt(1, id);
            psta.setString(2, nombre);
            psta.setString(3, apellidos);
            psta.setString(4, correo);
            psta.setString(5, telefono);
            psta.setDate(6, (Date) jDateChooser1.getDate());//Probar por separado
            psta.setString(7, puesto);
            psta.setDouble(8, salario);
            psta.setNull(9, java.sql.Types.INTEGER);
            psta.setInt(10, jefe);
            psta.setInt(11, depto);
            psta.executeUpdate();
            psta.close();
            JOptionPane.showMessageDialog(null, "Registro Guardado Satisfactoriamente");
        } catch (Exception e) {
            System.out.println(e.getCause());
        }
    }               

但是当我执行它时,它不起作用,控制台只说“null”。我认为问题要么是日期,要么是null,但我已经尝试了一周,还没有解决。

我希望有人能告诉我问题出在哪里。

提前感谢

共有1个答案

韦阳晖
2023-03-14

关于

下一个错误java.lang.ClassCastException:java.util.日期无法转换为java.sql.日期

看起来JFileChooser返回了一个java。util。日期,您需要的是java。sql。Date,一个继承自java的类。util。日期,SQL数据库将其用作日期类型。我没有看到任何复制构造函数,但也许可以使用从java转换为长参数的构造函数。util。日期到java。sql。日期

那么,如果你改变这一点:

psta.setDate(6, (Date) jDateChooser1.getDate());//Probar por separado

对此:

java.util.Date utilDate = (java.util.Date) jDateChooser1.getDate();
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
psta.setDate(6, sqlDate);
 类似资料:
  • 错误: SQL错误[1843][22008]:ORA-01843:不是有效的月份值(6,'RR','SS','2019-06-19'),错误Msg=ORA-01843:不是有效的月份ORA-01843:不是有效的月份

  • 我正在尝试使用Java jdbc连接在mysql数据库中插入一行。。。。 这是我的密码, } 当我尝试运行代码时,我得到类强制转换异常。。。非常感谢您的帮助。这是我的学生。java类 } 当我运行代码时,我得到以下错误:线程“main”java中出现异常。lang.ClassCastException:类java。util。日期不能转换为java类。sql。jdbcsample中的日期(java.

  • 如果在批处理过程中发生错误,Oracle JDBC驱动程序将引发BatchUpdateException。使用NamedParameterJdbcDaoSupport插入数据,如下所示 由于唯一密钥约束,我遇到BatchUpdateException,我们正在处理数百万条记录,因此我们无法进入数据库检查唯一密钥。 如果一条记录失败,那么批插入不会失败。

  • 我已经了解了INSERT ALL语法,只要我不想检索插入的id值,它就可以正常工作。 与INSERT ALL语法相反,我可以在事务中使用多个INSERT INTO语句,这将起作用,但不利于性能,如下所述:在Oracle中进行多行插入的最佳方法?。 这是我当前的代码: 它适用于单行,但如果我尝试插入所有语法,我会得到一个: Java . SQL . sqlsyntaxerrorexception:O

  • 如本文所示,此功能在MySQL中可用,根据Sybase文档,它也应该得到支持,但是Sybase没有提供工作示例,因此您必须解释以下内容: 语法1使用指定的表达式列值插入单行或多行。如果指定,多行由附加括号分隔 因此,我将“附加括号”解释为期望下面的代码能够工作 然而,它错误地 我使用的是Sybase ASE 15,在INSERT语句的支持页面上看不到任何关于插入多行的引用 这个功能在赛贝斯可用吗?

  • 问题内容: 我想在表中添加可变数量的记录(天) 我已经看到了一个很好的解决方案: 但是可悲的是,这在UDF中不起作用(因为#temp和SET ROWCOUNT)。知道如何实现吗? 目前,我正在使用WHILE和表变量来完成此操作,但是就性能而言,这并不是一个好的解决方案。 问题答案: 这是我正在使用的方法,并且对于我的目的和使用SQL 2000来说效果最佳。因为就我而言,它位于UDF中,所以我不能使