0

java - 如何在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 选项中给出相同的名称,它不应该提供唯一的自动增量 ID,而是使用现有的 User_id 插入所有详细信息

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

4

1 回答 1

0

您正在寻找的是 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 参考

需要注意的是,最好使用 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();
于 2013-05-16T06:07:11.123 回答