Java-向MySql数据库发送变量插入数据

Java-向MySql数据库发送变量插入数据,java,mysql,insert,Java,Mysql,Insert,我有一个简单的程序,其中我想获取用户提供的名字和姓氏,然后将它们输入MySql数据库。这两个变量称为first和last,它们将是简单的命令行提示,因此scanner first然后scanner last。然后取first和last并将它们添加到我的MySql语句中。这是我的代码,但由于某些原因,我无法获得正确的语法。在这个例子中,我使用stations,尽管我可以也会使用prepared语句。在现实世界中,我会使用预先准备好的语句,但即使是一个语句也可以用于此项目 这是我的一行代码。现在,代

我有一个简单的程序,其中我想获取用户提供的名字和姓氏,然后将它们输入MySql数据库。这两个变量称为
first
last
,它们将是简单的命令行提示,因此scanner first然后scanner last。然后取first和last并将它们添加到我的MySql语句中。这是我的代码,但由于某些原因,我无法获得正确的语法。在这个例子中,我使用stations,尽管我可以也会使用prepared语句。在现实世界中,我会使用预先准备好的语句,但即使是一个语句也可以用于此项目

这是我的一行代码。现在,代码确实与两个常量值Cathy和Jones一起工作。我希望这些都是变量

class AddStudent 
{ 

    public static void main (String[] args) 
    { 
        try
        { 

            Connection conn = DriverManager.getConnection(url,user,pass); 
            Statement st = conn.createStatement(); 
            Scanner first = new Scanner(System.in);
            System.out.println(first.nextLine());


            String SQL = "INSERT INTO test VALUES ('Cathy', 'Jones')";
            st.executeUpdate(SQL);



              conn.close(); 

        } catch (Exception e) { 
            System.err.println("Got an exception! "); 
            System.err.println(e.getMessage()); 
        } 

    }

    private static String url = "jdbc:mysql://localhost:3306/registrar";

这么多潜在的错误

  • 缺少关闭类的关闭
    }
  • 您确定您的数据库正在运行吗
  • 您是否创建了表
    测试
    
    四,。
    你的扫描仪坏了

     Scanner scanner = new Scanner(System.in);
     String first = scanner.nextLine();
     String last = scanner.nextLine();
    
    五,

    应该是

    String SQL = String.format("INSERT INTO test VALUES ('%s', '%s')", first, last);
    st.executeUpdate(SQL);
    

    这么多潜在的错误

  • 缺少关闭类的关闭
    }
  • 您确定您的数据库正在运行吗
  • 您是否创建了表
    测试
    
    四,。
    你的扫描仪坏了

     Scanner scanner = new Scanner(System.in);
     String first = scanner.nextLine();
     String last = scanner.nextLine();
    
    五,

    应该是

    String SQL = String.format("INSERT INTO test VALUES ('%s', '%s')", first, last);
    st.executeUpdate(SQL);
    

    给你,但不建议使用
    语句

    Scanner first = new Scanner(System.in);
    String f = first.nextLine();
    
    Scanner last = new Scanner(System.in);
    String l = last.nextLine();    
    
    String SQL = "INSERT INTO test VALUES ('" + f + "','" + l + "')";
    st.executeUpdate(SQL);
    
    建议如下:

    PreparedStatement ps = conn.prepareStatement("INSERT INTO test VALUES (?, ?)");
    ps.setString(1, f);
    ps.setString(2, l);
    ps.executeUpdate();
    

    给你,但不建议使用
    语句

    Scanner first = new Scanner(System.in);
    String f = first.nextLine();
    
    Scanner last = new Scanner(System.in);
    String l = last.nextLine();    
    
    String SQL = "INSERT INTO test VALUES ('" + f + "','" + l + "')";
    st.executeUpdate(SQL);
    
    建议如下:

    PreparedStatement ps = conn.prepareStatement("INSERT INTO test VALUES (?, ?)");
    ps.setString(1, f);
    ps.setString(2, l);
    ps.executeUpdate();
    

    最好的方法是以下方法。下面的代码实现了您想要的,并防止了SQL注入和由用户恶意或意外输入引起的其他问题

    String firstName = "Cathy";
    String lastName = "Jones";
    String query= "INSERT INTO test VALUES (?,?)";
    PreparedStatement stmt = mysqlConnection.prepareStatement(query);
    stmt.setString(1,firstName);
    stmt.setString(2,lastName);
    stmt.executeUpdate(SQL);
    

    最好的方法是下面的方法。下面的代码实现了您想要的,并防止了SQL注入和由用户恶意或意外输入引起的其他问题

    String firstName = "Cathy";
    String lastName = "Jones";
    String query= "INSERT INTO test VALUES (?,?)";
    PreparedStatement stmt = mysqlConnection.prepareStatement(query);
    stmt.setString(1,firstName);
    stmt.setString(2,lastName);
    stmt.executeUpdate(SQL);
    

    抱歉,是的,就代码而言,它是有效的,sql表会得到更新。我剪掉了一点代码。主要问题是如何将这些常量值更改为变量。从到目前为止的所有答案来看,谢谢大家,我想第一步应该是更改prepared StatementSry,是的,只要代码有效,sql表就会得到更新。我剪掉了一点代码。主要问题是如何将这些常量值更改为变量。从目前为止所有的答案来看,谢谢大家,我想第一步应该是改变事先准备好的陈述谢谢。是的,这就是我需要使用的方向。第一部分,字符串firstName设置为Cathy,然后我可以将Cathy更改为从所选输入中获得的变量?是的,您可以将值更改为firstName或lastName,然后重新运行代码。在上面的例子中,我的名字等于Cathy,姓氏等于Jones。。。。我不太明白你的意思,谢谢。是的,这就是我需要使用的方向。第一部分,字符串firstName设置为Cathy,然后我可以将Cathy更改为从所选输入中获得的变量?是的,您可以将值更改为firstName或lastName,然后重新运行代码。在上面的例子中,我的名字等于Cathy,姓氏等于Jones。。。。我不确定我是否理解你的评论谢谢!。。每个人都帮了大忙,是的,我想,我必须弄清楚准备好的语句的语法。在安全领域工作,但我真的不太会写代码。我知道Sql注入有多容易。这主要是一个测试项目,针对一个简单的学校班级,提供的帮助不多。谢谢!。。每个人都帮了大忙,是的,我想,我必须弄清楚准备好的语句的语法。在安全领域工作,但我真的不太会写代码。我知道Sql注入有多容易。这主要是一个测试项目,针对一个简单的学校班级,提供的帮助并不多。