【问题标题】:Getting an Error in JDBC Java while inserting an record插入记录时在 JDBC Java 中出现错误
【发布时间】:2016-12-26 09:36:18
【问题描述】:

我正在编写 Java JDBC 代码以在表中输入记录,但出现错误 java.sql.SQLException: ORA-01438: value greater than specified precision allowed for this column。据我了解,我在 int result = pst.executeUpdate(); 语句中的 class StudentDAO 中遇到错误,这是我的代码

 package com.wipro.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;

import com.wipro.util.DBUtil;
import com.wipro.util.Student;

//Crud operation logic
public class StudentDAO {

    public String insertStudent(Student Student17){
        String output = "fail";
        try{

            Connection conn = DBUtil.getDBConnection();
            PreparedStatement pst = conn.prepareStatement("insert into Student17(stdid,name,sub1,sub2,sub3,total,avg) values(?,?,?,?,?,?,?)");
            pst.setInt(1, Student17.getStdid());
            pst.setString(2, Student17.getName());
            pst.setInt(3, Student17.getSub1());
            pst.setInt(4, Student17.getSub2());
            pst.setInt(5, Student17.getSub3());
            pst.setInt(6, Student17.getTotal());
            pst.setInt(7, Student17.getAvg());

            //System.out.println("Output===== " + Student17.getTotal());
            //System.out.println("Output===== " + Student17.getAvg());

            //System.out.println("Output===== " + Student17.getName());

            //System.out.println("Output===== " + Student17.getSub1());

            //System.out.println("Output===== " + Student17.getSub2());

            //System.out.println("Output===== " + Student17.getSub3());

            int result = pst.executeUpdate(); 
            if(result != 0){
                output = "Success";
            }
            conn.close();
        }catch(Exception e){
            e.printStackTrace();
        }
        return output;
    }

}

package com.wipro.service;

import com.wipro.dao.StudentDAO;
import com.wipro.util.Student;

public class StudentService {
    public String InsertStudentService(Student Student17){
        String result = "Validation Error";
        if(Student17.getStdid()==0||Student17.getName()==null||Student17.getSub1()<=0||Student17.getSub2()<=0||Student17.getSub3()<=0)
            return result;
        else{
            int total  = Student17.getSub1() + Student17.getSub2() + Student17.getSub3();
            Student17.setTotal(total);
            Student17.setAvg(total/3);
            StudentDAO studentdao = new StudentDAO();
            studentdao.insertStudent(Student17);
            result = studentdao.insertStudent(Student17);
            return result;
        }
    }
}


package com.wipro.util;

import java.sql.Connection;
import java.sql.DriverManager;

public class DBUtil {

    public static Connection getDBConnection() {
        Connection conn = null;
        try{
        Class.forName("oracle.jdbc.driver.OracleDriver");         

        conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","system","oracle");  

        }catch(Exception e){
            e.printStackTrace();
        }
        return conn;
    }

}

package com.wipro.util;

public class Student {
    private int stdid;
    private String name;
    private int sub1, sub2, sub3;
    private int total;
    private int avg;


    public void setStdid(int stdid) {
        this.stdid = stdid;
    }
    public int getStdid() {
        return stdid;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getSub1() {
        return sub1;
    }
    public void setSub1(int sub1) {
        this.sub1 = sub1;
    }
    public int getSub2() {
        return sub2;
    }
    public void setSub2(int sub2) {
        this.sub2 = sub2;
    }
    public int getSub3() {
        return sub3;
    }
    public void setSub3(int sub3) {
        this.sub3 = sub3;
    }
    public int getTotal() {
        return total;
    }
    public void setTotal(int total) {
        this.total = total;
    }
    public int getAvg() {
        return avg;
    }
    public void setAvg(int avg) {
        this.avg = avg;
    }

}


package com.wipro.main;

import com.wipro.service.StudentService;
import com.wipro.util.Student;

public class MainClass {
    public static void main(String[] args){
        Student Student17 = new Student();

        Student17.setStdid(10);
        Student17.setName("karan");
        Student17.setSub1(80);
        Student17.setSub2(90);
        Student17.setSub3(100);

        StudentService service = new StudentService();
        String result = service.InsertStudentService(Student17);
        System.out.println("Output: "+ result);

    }
}

我得到的错误是

java.sql.SQLException: ORA-01438: value larger than specified precision allowed for this column

    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
    at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)
    at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:955)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1169)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3285)
    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3368)
    at com.wipro.dao.StudentDAO.insertStudent(StudentDAO.java:37)
    at com.wipro.service.StudentService.InsertStudentService(StudentService.java:16)
    at com.wipro.main.MainClass.main(MainClass.java:17)
java.sql.SQLException: ORA-01438: value larger than specified precision allowed for this column

    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
    at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)
    at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:955)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1169)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3285)
    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3368)
    at com.wipro.dao.StudentDAO.insertStudent(StudentDAO.java:37)
    at com.wipro.service.StudentService.InsertStudentService(StudentService.java:17)
    at com.wipro.main.MainClass.main(MainClass.java:17)
Output: fail

据我了解,我在 int result = pst.executeUpdate(); 语句中的 class StudentDAO 遇到错误 任何帮助表示赞赏。提前致谢。

【问题讨论】:

  • O 认为信息很清楚。您向列中添加了一个太大的值
  • ...查看表格定义(我们不能这样做,因为您没有发布它)您应该能够弄清楚它是哪一列。
  • 这是我用来创建表的 SQL 命令 - create table Student17(stdid number(3) primary key,name varchar2(100),sub1 number(2),sub2 number(2), sub3个数(2),总数(3),平均数(3));
  • 那么您希望如何在两位数列sub3 中插入100(如Student17.setSub3(100);)?
  • 谢谢'piet.t'。我更改了号码,但现在我收到错误 java.sql.SQLException: ORA-00001: unique constraint (SYSTEM.SYS_C004025) 违反。但正在插入记录。

标签: java mysql oracle jdbc


【解决方案1】:

问题出在 sub3 中,因为是 3 位数字。

create table Student17(
    stdid number(3) primary key,
    name varchar2(100),
    sub1 number(2),
    sub2 number(2),
    sub3 number(2),
    total number(3),
    avg number(3)
); 
sub3 number(2)

然后在代码上,更改:Student17.setSub3(100);

【讨论】:

  • 谢谢“教育”。我更改了号码,但现在我收到错误 java.sql.SQLException: ORA-00001: 违反唯一约束 (SYSTEM.SYS_C004025)
  • @tj_lucas 这可能是因为您已经在表中插入了一条学生 ID 为 10 的记录。只需更改 id 并再次运行。
猜你喜欢
  • 2016-10-18
  • 1970-01-01
  • 1970-01-01
  • 2016-11-15
  • 1970-01-01
  • 2018-07-29
  • 2014-10-05
  • 2022-07-29
  • 2022-01-20
相关资源
最近更新 更多