首页 > 解决方案 > 如何在我的 SQL 语句中使用 Java 变量?

问题描述

我正在尝试使用局部变量用户名和密码添加到我的表中。我只尝试了变量,该条目被计算在内,但它显示为空白。

public class FullDB
{
    public static void main(String args)
    {
        FullDB connection = new FullDB();
    }

    public FullDB()
    {
        createConnection("usman","hello",true);
    }

    public void createConnection(String userName, String password, boolean select) {
        try {
            //Connect to database
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection connect = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/?", "root", "");
            System.out.println("Connected to Database");

            //SQL Statement
            Statement query = connect.createStatement();

            //Insert Statement
            if (userName != null)
            {
               //query.executeUpdate("INSERT INTO users" + "(UserName,Password)" + "VALUES (userName,password)");
                query.execute("DELETE FROM users");
            }

            if (select == true)
            {
                ResultSet rs = query.executeQuery("SELECT * FROM users");
                System.out.println("User Data:");
                while(rs.next())
                {
                    String table = rs.getString("UserName");
                    System.out.println(table);
                }
            }
        }
        catch (ClassNotFoundException ex)
        {
            Logger.getLogger(FullDB.class.getName()).log(Level.SEVERE, null, ex);
        }
        catch (SQLException ex)
        {
            Logger.getLogger(FullDB.class.getName()).log(Level.SEVERE, null, ex);
            ex.printStackTrace();
        }
    }
}

标签: java

解决方案


尝试这个...

query.executeUpdate("INSERT INTO users (UserName,Password) VALUES ('" + userName + "','" + password + "');");

也许双引号在错误的位置。尝试直接在数据库命令行中使用相同的查询,不使用引号和一些虚拟数据,如果它在那里工作,请进行必要的修改以适合您的代码。

(编辑)

正如saarp在下面的评论中提到的,在 SQL 字符串中使用值存在一些安全问题,这样做很简单但不是最安全的方法。

而且,这些值必须用单引号 ( ' ) 转义,我总是忘记它们。问题已在上面的代码中修复。


推荐阅读