有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

MySQL workbench中有下表--

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(自动增量)

我想要的是,如果我在我的用户名选项中给出了相同的名称,它不应该提供唯一的自动递增id,而是插入现有用户名的所有细节

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


共 (1) 个答案

  1. # 1 楼答案

    您需要的是SQL,如果主键存在,则更新值;如果主键不存在,则插入值

    在MySQL中,只有当insert不存在时,它才具有以下形式

    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();