0

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

这是我的带有一条扫描线的代码。现在,代码确实适用于两个常量值 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";
4

3 回答 3

2

给你,但不建议一起去Statement

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

参考资料

于 2012-08-22T18:23:29.127 回答
1

这么多潜在的错误。

  1. 错过了关闭}课程。
  2. 你确定你的数据库正在运行吗?
  3. 你创建表了test吗?

4. 您的扫描仪异常。

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

5.

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

应该

String SQL = String.format("INSERT INTO test VALUES ('%s', '%s')", first, last);
st.executeUpdate(SQL);
于 2012-08-22T18:17:54.200 回答
0

最好的方法是以下方法。下面的代码可以实现您想要的,并防止 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);
于 2012-08-22T18:31:08.000 回答