Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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 无法使用jdbc将数据插入数据库中的表中_Java_Sql_Jdbc - Fatal编程技术网

Java 无法使用jdbc将数据插入数据库中的表中

Java 无法使用jdbc将数据插入数据库中的表中,java,sql,jdbc,Java,Sql,Jdbc,在通过JDBC创建的表中插入新行数据时遇到问题。它在ExecuteUpdate()行之后抛出SQLException 下面我提供了一个代码,该代码创建了数据库和该数据库中的表。第二部分有一个代码,它应该将值插入PatientsData表的行中 public class DbSetUp { private static Connection con; private static String mySqlString = "CREATE TABLE PatientsData" +

在通过JDBC创建的表中插入新行数据时遇到问题。它在ExecuteUpdate()行之后抛出SQLException

下面我提供了一个代码,该代码创建了数据库和该数据库中的表。第二部分有一个代码,它应该将值插入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();我不知道哪里出了错。我已将derby.jar添加到构建路径中。

您的SQL语句错误

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

INSERT INTO PatientsData(columnname1,columname2...) VALUES(?,?,?,?,?,?)
我怀疑…我没有真正了解功能,但看起来不错


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

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


确保您正在为ID生成唯一值。

请发布异常详细信息。请显示异常错误消息和堆栈跟踪“java.sql.SQLIntegrityConstraintViolationException:该语句被中止,因为它会在由标识的唯一或主键约束或唯一索引中导致重复的键值在“PATIENTSDATA”上定义了“SQL120407181654820”。在org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(未知源)”中,您插入了重复的密钥,这是非法的。这与您的代码无关,但与您的数据有关。是的,现在我知道了:)谢谢您提醒我打印堆栈跟踪。现在我有另一个问题,但我会先尝试自己解决。声明没有错。允许省略列名,但这被认为是不好的样式。在INSERT语句中明确列出列肯定是更好的选择。