在MySQL中插入时检查数据库中是否存在用户名

时间:2013-05-16 06:02:02

标签: java mysql sql database

如何在Java中插入MySQL时检查数据库中给定的用户名是否存在?

我在MySQL工作台中有下表 -

user_id       int            not null,autoincrement
movie _id     int            not null 
movie_name    varchar        
user_name     varchar
rating        int
genre         varchar

以下是插入数据库 -

try {
                Class.forName("com.mysql.jdbc.Driver");
                Connection con = DriverManager.getConnection(
                        "jdbc:mysql://localhost:XXXX/Recommendation1", "root",
                        "XXXXXXXXXXX");
                Statement st = con.createStatement();
                int i = st
                        .executeUpdate("insert into Table1(movie_Id,movie_name,user_name,rating,genre) values('"
                                + movieId
                                + "','"
                                + mname
                                + "','"
                                + pname
                                + "','" + ratingr + "','" + genre + "')");
                out.println("Data is successfully inserted!");
            } catch (Exception e) {
                System.out.print(e);

所以这里是我只插入电影ID,nmovie名称,用户名,评级类型然后它进入数据库并提供用户ID(自动增量)

我想要的是,如果我在user_name选项中给出相同的名称,它不应该提供唯一的autoincremente id,而是将所有细节插入现有的User_id

换句话说,如何在数据库中检查给定用户名是否存在?

1 个答案:

答案 0 :(得分:0)

您正在寻找的是在主键存在时更新值的SQL,如果不存在则插入SQL。

在MySQL中,仅当插入不存在时,插入格式为

INSERT INTO Table11(...) VALUES(...) ON DUPLICATE KEY UPDATE col11=value1, col2=value2,...

要指定您希望值来自VALUES()部分,您需要进行以下操作。

INSERT INTO Table11(...) VALUES(...) ON DUPLICATE KEY UPDATE col1=VALUES(col1), col2=VALUES(col2),...

使用表名和列名的完整示例

"insert into Table1(movie_Id,movie_name,user_name,rating,genre) values('"
                            + movieId+ "','"+ mname+ "','"+ pname
                            + "','" + ratingr + "','" + genre + "') "
                            + "ON DUPLICATE KEY UPDATE "
                            + "movie_name=VALUES(movie_name), user_name=VALUES(user_name), "
                            + "rating=VALUES(rating), genre=VALUES(genre) "

MySQL ON DUPLICATE KEY reference

作为一个注释,使用prepare语句避免SQL注入是更好的形式。

String stmt = "insert into Table1(movie_Id,movie_name,user_name,rating,genre) values(?,?,?,?,?) "
                            + "ON DUPLICATE KEY UPDATE "
                            + "movie_name=VALUES(movie_name), user_name=VALUES(user_name), "
                            + "rating=VALUES(rating), genre=VALUES(genre) "

PreparedStatement ps = connection.prepareStatement(stmt);
ps.setObject(1, movie_id);
ps.setObject(2, movie_name);
ps.setObject(3, user_name);
ps.setObject(4, rating);
ps.setObject(5, genre);
ResultSet rs = ps.executeQuery();