无法使用jdbc将数据插入到db中的表中

时间:2012-04-08 13:06:56

标签: java sql jdbc

我有一个问题是在我通过JDBC创建的表中插入一行新数据。它在ExecuteUpdate()行之后抛出SQLException。

下面我提供了一个代码,用于在此DB中创建数据库和表。第二部分的代码应该在PatientsData表中的行中插入值。

public class DbSetUp {

private static Connection con;
private static String mySqlString = "CREATE TABLE PatientsData" +
        "(id INTEGER PRIMARY KEY," +
        "fname VARCHAR(30) NOT NULL," +
        "lname VARCHAR(30) NOT NULL," +
        "sex VARCHAR(1) NOT NULL," +
        "insurance VARCHAR(1) NOT NULL," +
        "profession VARCHAR(30) NOT NULL)";
//private boolean end;
private static String strTemp = "CREATE TABLE PatientsTemp" +
        "(id INTEGER PRIMARY KEY," +
        "name VARCHAR(256) NOT NULL," +
        "date DATE NOT NULL," + 
        "temp NUMERIC NOT NULL)";


public static void main(String[] args) {

    try {
        Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
    } catch (ClassNotFoundException e) {
        System.out.println("Driver not found");
        e.printStackTrace();
    }   

    try {
        con = DriverManager.getConnection("jdbc:derby:PatientDb;create=true");
    } catch (SQLException e) {
        System.out.println("Db not found");
        e.printStackTrace();
    }

    Statement statement = null;
    try{
        statement = con.createStatement();
        statement.execute(mySqlString);
        statement.execute(strTemp);

    } catch(SQLException ex){
        ex.printStackTrace();
    }



}

以上代码工作正常,没有例外。我假设已经创建了两个表并且数据库存在:)

不是应该插入数据的部分:

public Patient createNewPatient(int id, String fname, String lname,
        String sex, String insurance, String profession) {

    try {
        DriverManager.registerDriver(new org.apache.derby.jdbc.EmbeddedDriver());
    } catch (SQLException e1) {
        System.out.println("to na poczatku");
        e1.printStackTrace();
    }

    try{
        con = DriverManager.getConnection("jdbc:derby:PatientDb"); 
        PreparedStatement ps = con.prepareStatement("INSERT INTO PatientsData VALUES(?,?,?,?,?,?)");
        System.out.println("Prepared Statement");
        ps.setInt(1, id);
        System.out.println("set int id");
        ps.setString(2, fname);
        ps.setString(3,lname);
        ps.setString(4,sex);
        ps.setString(5, insurance);
        ps.setString(6,profession);
        System.out.println("set string profession");
        result = ps.executeUpdate();
        System.out.println(result);
        return new Patient(id,fname,lname,sex,insurance,profession);
        //System.out.println("set string profession");


    } catch(SQLException e){
        System.out.println("SQL exception");
        return null;
    }

}

行:result = ps.executeUpdate();抛出SQLException,我不知道错误在哪里。我已将derby.jar添加到我的构建路径中。

2 个答案:

答案 0 :(得分:1)

您的SQL语句错误

INSERT INTO PatientsData VALUES(?,?,?,?,?,?)

需要

INSERT INTO PatientsData(columnname1,columname2...) VALUES(?,?,?,?,?,?)

我怀疑......并没有真正阅读有关功能但看起来很好。

啊误读了......这是一个Derby查询...我的格式是来自MS SQL ..所以..不知道如果它的答案

答案 1 :(得分:0)

问题是你试图在ID列中插入重复值

确保您为ID生成唯一值。