试图查找数据库表中是否存在某个项目(如果该项目不存在)。添加它

时间:2013-05-05 19:23:09

标签: java sql database select

我正在尝试开发一个你想要添加新书的程序(标题,作者,日期......) 但我不想多次添加作者.. 我希望程序检查作者是否已经存在于表中,如果不存在则会添加他...这是我的代码:

public void insert_bk(String m, String a, String b, String c, String d, String e) {
    String sql="Select * from author where Full_Name='"+b+"'";
    System.out.println(sql);

    try {  
        opencn();
        Statement st=cn.createStatement();
        ResultSet rs=st.executeQuery(sql);

        while (rs.next()) { 
            String id=rs.getString("Author_ID");
            System.out.println(id);
            st.executeUpdate("INSERT into book (`Book_ID`,`Title`,`Author_ID`,`Date_of_release`,`Theme`,`Edition`)"+ "VALUES ('" + m+ "','" + a+ "','" + id+ "', '" + d+ "', '" + e+ "', '" + c+ "')");
        }  
    }
    catch(SQLException exp) {
        System.out.println(exp.getMessage());
    }
}

在这段代码中,它只是检查作者是否存在并添加书籍......我怎样才能证明如果作者不存在则会将他与书一起添加?

有什么想法吗? 提前谢谢你:)

4 个答案:

答案 0 :(得分:1)

不应使用while循环,而应将rs.next()放入if语句中。如果调用返回false,则不存在作者且必须插入。

答案 1 :(得分:0)

您可以通过在语句中添加关键字IGNORE来创建条件插入。根据您使用的SQL数据库,答案略有不同。我将在这里演示MySQL和sqlite的两种方式,但当然还有更多。

对于MySQL

INSERT IGNORE INTO authors VALUES(?,?...,?) 

对于SQLite

INSERT OR IGNORE INTO authors VALUES(?,?,...,?);

答案 2 :(得分:0)

你可以做这个存储过程

declare @i int
Select @i=count(*) from author where Full_Name=@FullName
IF(@i < 1)
  BEGIN
  // INSERT 
  END

答案 3 :(得分:0)

这可能会有所帮助

String query = "Select * from author where Full_Name='"+b+"'";
SqlCommand cmd = new SqlCommand(query, con);
SqlDataReader rdr;
con.Open();
cmd.ExecuteNonQuery();
rdr = cmd.ExecuteReader();

if (rdr.Read()) { // if you have an author
    //do your updation code here
}
else {
    //if rdr.Read() gives 0 which will be the case when our
    //author wont exist past the code for adding an author here
}