0

JDBCを介して作成したテーブルにデータの新しい行を挿入するのに問題があります。ExecuteUpdate()行の後にSQLExceptionをスローします。

以下に、このDBにDBとテーブルを作成したコードを示します。2番目の部分には、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();
    }



}

上記のコードは、例外をスローせずに正常に機能します。両方のテーブルが作成され、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;
    }

}

次の行:result = ps.executeUpdate(); SQLExceptionをスローしますが、どこに間違いがあるのか​​わかりません。ビルドパスにderby.jarを追加しました。

4

2 に答える 2

1

あなたのSQL文は間違っています

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

ニーツ

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

私は疑います...機能について実際に読んだことはありませんが、問題ないようです。

ああ、読み違えました... Derbyクエリです...私のフォーマットはMS SQLからのものです..だから..その答えならドンノ

于 2012-07-05T10:43:51.090 に答える
0

ID列に重複する値を挿入しようとしていることが問題です

ID の一意の値を生成していることを確認してください。

于 2014-04-04T07:01:27.827 に答える