我正在尝试开发一个你想要添加新书的程序(标题,作者,日期......) 但我不想多次添加作者.. 我希望程序检查作者是否已经存在于表中,如果不存在则会添加他...这是我的代码:
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());
}
}
在这段代码中,它只是检查作者是否存在并添加书籍......我怎样才能证明如果作者不存在则会将他与书一起添加?
有什么想法吗? 提前谢谢你:)
答案 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
}