java sql插入没有重复

时间:2015-12-23 16:53:37

标签: 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))";

我想从包含许多行的给定数组中插入一些行。所以我尝试了这段代码并且无法正常工作。如何在不重复主键和空状态的情况下修复它?

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() +   "')";
        }
    }
}

2 个答案:

答案 0 :(得分:1)

您需要唯一的ISBN,因此您可以:

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

答案 1 :(得分:0)

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

"INSERT IGNORE" vs "INSERT ... ON DUPLICATE KEY UPDATE"

如果primary存在并且您想要更新(如果它存在),您可以使用insert on duplicate key update,如上面的链接所述。

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