无法使用jdbc在数据库中插入数据到数据库
问题描述:
我有一个问题,即向我通过JDBC创建的表中插入新的数据行。它在ExecuteUpdate()行之后引发SQLException。无法使用jdbc在数据库中插入数据到数据库
下面我提供了一个在DB中创建DB和表的代码。第二部分的代码应该将值插入到患者数据表中的行中。
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();
}
}
上面的代码工作正常,抛出没有例外。我假定两个表已经创建和DB存在:)
不是这是应该插入数据的一部分:
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;
}
}
行:结果= ps.executeUpdate();抛出SQLException,我不知道错误在哪里。我已将derby.jar添加到我的构建路径中。
答
你的SQL语句是错误的
INSERT INTO PatientsData VALUES(?,?,?,?,?,?)
啃老族是
INSERT INTO PatientsData(columnname1,columname2...) VALUES(?,?,?,?,?,?)
我怀疑......真正地没有阅读功能,但看起来不错。
啊误读......它是一个德比查询......我的格式是MS SQL ..所以..如果答案
+0
声明没有错。允许忽略列名称,但这被认为是不好的风格。明确列出INSERT语句中的列肯定是更好的选择。 – 2012-07-05 10:47:10
答
的问题是你想在ID列
插入重复值唐诺确保您为ID生成唯一值。
请张贴异常详情。 – MByD 2012-04-08 13:10:18
请显示异常错误消息和堆栈跟踪 – Thilo 2012-04-08 13:11:36
'java.sql.SQLIntegrityConstraintViolationException:语句被中止,因为它会在'PATIENTSDATA'上定义的'SQL120407181654820'标识的唯一或主键约束或唯一索引中导致重复键值”。 \t at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source)' – user1158803 2012-04-08 13:19:28