无重复的java sql插入

无重复的java sql插入,java,mysql,sql-server,primary-key,sql-insert,Java,Mysql,Sql Server,Primary Key,Sql Insert,我是使用java编写sql的新手。我可以创建如下表: String queryCreateBookTable = "create table Book (" + "isbn char(13) not null," + "author char(30)," + "title char(30)," + "subject char(30)," + "primary key(isbn))"; 我想从包含许多行的给定数组中插入一些行。所以我尝试了这个代码,但

我是使用java编写sql的新手。我可以创建如下表:

String queryCreateBookTable = "create table Book (" + 
    "isbn char(13) not null," + 
    "author char(30)," + 
    "title char(30)," +
    "subject char(30)," +
    "primary key(isbn))";
我想从包含许多行的给定数组中插入一些行。所以我尝试了这个代码,但它不起作用。如果没有主键重复和空的情况,我如何修复它

public int insertBook(Book[] books)
{
    int result = 0;
    int art=0;
    String query = null;
    String[] depo=null;
    while(books[art].getIsbn().length() == 13 )
    {
        if(art==0)
        {
            depo[0]=books[0].getIsbn();
        }
        for(int i=0;i<art;i++)
        {
            if(books[art].getIsbn() ==depo[i])
                result++;
            else
                result=0;
        }
        if(result==0)
        {
            query= "insert into Book values ('" + 
            books[art].getIsbn()+ "','" + 
            books[art].getAuthor() + "','" + 
            books[art].getTitle() + "','" + 
            books[art].getSubject() +   "')";
        }
    }
}
public int insertBook(Book[]books)
{
int结果=0;
int-art=0;
字符串查询=null;
字符串[]depo=null;
while(书籍[art].getIsbn().length()=13)
{
如果(艺术==0)
{
depo[0]=书籍[0]。getIsbn();
}

对于(int i=0;i您需要唯一的ISBN,因此您可以:

  • 执行插入,让它失败,捕获
    SQLException
    (忽略重复项)并继续(可能很昂贵)
  • 预筛选集合。例如,使用
    java.util.Set
    删除重复的ISBN(脆性方法)
  • 事先检查数据库中是否已经存在ISBN。基本上先进行选择,只有在得到空的
    ResultSet
    时才进行插入(可能最好)

如果不存在,您的要求是插入。您可以使用插入忽略

如果主密钥存在并且您想更新,如果主密钥存在,您可以使用上面链接中描述的重复密钥更新时插入


对于检查空条件,您必须使用if条件进行空检查,如果它为空,则跳过当前记录并继续下一个记录

这不是它最初的工作方式吗?当您插入重复的isbn时,它不应该插入您的意思是构造一个只为插入指定特定字段的查询,n不是全部吗?我不想插入isbn已存在于中的行query@YavuzSelimKartalisbn是主键,插入就会失败。这正是我在评论中的意思,让插入失败吧,反正它是主键