sql >> データベース >  >> RDS >> Mysql

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:キー'PRIMARY'の重複エントリ''

    削除する必要があります ; SQLクエリで:

    間違ったクエリ:

    prepareStatement("create table staff (staffname varchar(30) primary key);");
    
    preparedStatement = connect.prepareStatement("insert into staff values(?);");
    

    正しいクエリは次のとおりです:

    prepareStatement("create table staff (staffname varchar(30) primary key)");
    
    preparedStatement = connect.prepareStatement("insert into staff values(?)");
    

    挿入クエリを確認してください

    そして、あなたの挿入 そのクエリが間違っているデータベースの値は、テーブル名に言及していました ただ、列名については言及しないでください 。したがって、クエリにテーブル名を追加する必要があります。

    間違ったクエリ:

    insert into staff values(?)
    

    正しいクエリ:

        INSERT INTO table_name
        VALUES (value1,value2,value3,...);
    

    このリンクを参照してください:

    http://www.w3schools.com/sql/sql_insert.asp >

    更新:1

    間違ったコード:

    statement = connect.createStatement();
    preparedStatement = connect
                    .prepareStatement("SELECT count(*)FROM information_schema.tables\n"
                            + "WHERE table_schema = 'project' AND table_name = 'staff'");
            rs = preparedStatement.executeQuery();
            rs.next();
    

    次のように変更する必要があります:sample

    Class.forName(driverName).newInstance();
    con=DriverManager.getConnection(connectionUrl+dbName,user,password);
    st = con.createStatement();
    String sql="SELECT * FROM employees";
    rs=st.executeQuery(sql);
    

    注:

    1. SQLクエリを呼び出さないでください。
    2. そして、 preparedStatementを使用しています 電話をかけるには、ステートメントに変更する必要があります
    3. preparedStatement 解決できません。

    のように

    string sql=....sql query...;
    statement.executeQuery(sql) 
    

    update:2:-> sample

    public class User 
    {
    private String empname;
    public String getEmpName()
    {
        return empname;
    }
    public void setEmpName(String empname)
    {
        this.empname=empname;
    }
    
    public void addUser(User user)
    {
        try
        {
            PreparedStatement ps;
            ps=connection.prepareStatement("INSERT INTO employee (empname,empaddress,depname) VALUES (?,?,?)");
            ps.setString(1, user.getEmpName());
            ps.setString(2, user.getEmpAddress());
            ps.setString(3, user.getDepName());
            ps.executeUpdate();
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
    }
    


    1. 集計関数のないGROUPBY句の理由は何ですか?

    2. MariaDBのすべての関数を一覧表示する2つの方法

    3. OracleODBC接続でのパラメータの使用

    4. SQLDeveloperでのSQLステートメントの調整