SQLEXCEPTION:long类型的值错误

时间:2018-08-16 17:26:10

标签: java sql postgresql jdbc

编辑:我通过一个错误解决了插入问题,因此我删除了该部分问题,但对于long类型错误仍然具有Bad值。

编辑:小型公司表的创建语句

create table small_company
(
    first_name varchar(20),
    last_name varchar(30),
    address text,
    emp_id serial not null
)
;

创建于:

create table company
(
    first_name varchar(20),
    last_name varchar(30),
    company_name text,
    address text,
    city varchar(30),
    province text,
    postal varchar(7),
    phone1 text,
    phone2 text,
    email text,
    web text
)
;

create index name_priority
    on company (first_name)
;

我收到此错误,提示“ long类型的值不正确:”

// insert values into the "small_company" table

long insertEmp(String first_name, String last_name, String address) {

    String sql = "insert into small_company values (?,?,?)";

    long id = 0;

    try {
        Connection conn = connect();
        PreparedStatement pstmt = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);

        pstmt.setString(1,first_name);
        pstmt.setString(2,last_name);
        pstmt.setString(3,address);

        int affectedRows = pstmt.executeUpdate(); // returns number of affected rows

        if (affectedRows > 0) { // means a row was affected so get the ID

            try {
                ResultSet rs = pstmt.getGeneratedKeys();
                if (rs.next()) {
                    id = rs.getLong(1); // if cursor finds row with id, return it
                }
            }

            catch (SQLException e) {
                System.out.println(e.getMessage());
            }
        }
    }

    catch (SQLException e){
        System.out.println(e.getMessage());
    }

    return id;
}

public static void main(String[] args) {

    Queries q1 = new Queries();
    //q1.getRowCount("company");
    //q1.displayTable();
    //q1.displayCompany(); // <- what I use to display table!
    //q1.findEmployee(10);
    q1.insertEmp("Laura","Lane","Daily St. Planet co. NE"); //<-what I use to insert!
}

非常感谢所有帮助!

1 个答案:

答案 0 :(得分:1)

small_company中的第一列是first_name,您不能在varchar列上使用getLong()。您必须改用getLong("emp_id")

或者,您可以告诉JDBC驱动程序仅返回emp_id

PreparedStatement pstmt = conn.prepareStatement(sql,new String[]{"emp_id"});

然后getLong(1)应该可以正常工作,并且只返回一列(至少使用最新的JDBC驱动程序)。