如何在数据库中搜索列以匹配用户输入

时间:2018-04-28 00:30:28

标签: java postgresql jdbc

我正在尝试查询postgresql数据库以检查用户输入的匹配项。例如,如果用户输入用户名' user1',我想搜索数据库的users表中的username列以查找与用户名的匹配项。

我的数据库集合有效,并且在使用查询时(从用户中选择*),我将获得控制台中显示的正确信息。当我在PGAdmin或终端中运行以下查询时,我得到了正确的结果(从用户名=' user1&#39 ;;)中选择用户名。

  • 在java应用程序中,User.getUserName()是一个getter,当提示用户在帐户注册页面上输入用户名时,它会返回应用程序设置的userName。

代码如下:

public static void isUniqueUser(String userName) {
    try {
        Class.forName("org.postgresql.Driver");
        Connection con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/bigday", "postgres", "admin");
        PreparedStatement stmt = con.prepareStatement("select from users where username = " + User.getUserName());
        ResultSet rs = stmt.executeQuery();
        //if name found in db prompt name already taken
        while(rs.next()) {
            System.out.println("User Name: " + rs.getString(1) + "Password: " 
                    + rs.getString(2) + "Email: " + rs.getString(3) + "Phone: " + rs.getString(4));
        }

    }catch (Exception ex) {
        System.out.println(ex.getMessage());
    }
}

当我在Eclipse中运行查询时,这是在控制台中返回的内容:

错误:列" user1"不存在   职位:36

1 个答案:

答案 0 :(得分:1)

您需要引用String(带'个字符),或更好使用绑定参数。并指定一些列(或使用splat,*)。像,

PreparedStatement stmt = con.prepareStatement("select * from users where username = ?");
stmt.setString(1,  User.getUserName());
ResultSet rs = stmt.executeQuery();