在mysql insert语句中使用java变量作为值

时间:2014-01-02 23:45:50

标签: java mysql sql

我目前有两个创建的方法,一个名为createDatabase,它创建一个mysql数据库,表并在该表中插入值。第二种方法从用户收集数据并将它们存储在变量中。

我很难知道如何将变量从userInput方法传递给createDatabase方法,以及如何将变量用作insert语句的值。

这是createDatabase方法

  public void createDatabase(){
    String data = "jdbc:mysql://localhost:3306/?user=root&password=root";
    try {

         Class.forName("com.mysql.jdbc.Driver");


        Connection conn = DriverManager.getConnection(data);
        Statement st = conn.createStatement();
        System.out.println("Connection made");

        int result = st.executeUpdate("DROP DATABASE IF EXISTS TESTDATABASE");

        result = st.executeUpdate("CREATE DATABASE TESTDATABASE");

        result = st.executeUpdate("USE TESTDATABASE");

        result = st.executeUpdate(
                "CREATE TABLE testtable ("
                + "dex INT NOT NULL AUTO_INCREMENT PRIMARY KEY, "
                + "name VARCHAR(40), "
                + "address1 VARCHAR(40), "
                + "address2 VARCHAR(40), "
                + "phone VARCHAR(20), "
                + "email VARCHAR(40))");
        result = st.executeUpdate(
                "INSERT INTO testtable(name, address1, address2, "
                + "phone, email) VALUES("
                + "'+name+', "
                + "'+address1+', "
                + "'+address2+', "
                + "'+phone+', "
                + "'+email+')"); 

        st.close();
        System.out.println("Database Created");
    }   catch (Exception e) {
            System.out.println("Error -- " + e.toString());
    }

}

userInput方法

public void userInput(){
    String name;
    String address1;
    String address2;
    String phone;
    String email;

    Scanner in = new Scanner(System.in); 

    System.out.println("Enter name");
    name = in.nextLine();
    System.out.println("Enter first line of address");
    address1 = in.nextLine();
    System.out.println("Enter second line of address");
    address2 = in.nextLine();
    System.out.println("Enter phone number");
    phone = in.nextLine();
    System.out.println("Enter email address");
    email = in.nextLine();
    System.out.println("Details collected");

}

主要

public static void main(String[] arguments) {
    TestDatabase test = new TestDatabase();
    test.userInput();
    test.createDatabase();

}

任何帮助和建议,谢谢!

2 个答案:

答案 0 :(得分:5)

要插入记录,您应使用PreparedStatement来防止SQL注入:

    try{
        String sql = "INSERT INTO testtable(name, address1, address2,phone, email)VALUES(?,?,?,?,?)"
        PreparedStatement statement = conn.prepareStatement(sql);
        statement.setString(1,name);
        statement.setString(2,address1);
        statement.setString(3, address2);
        statement.setString(4, phone);
        statement.setString(5, email);
        statement.executeUpdate();
     }catch(SQLException e){

     }

连接String以形成SQL语句绝不是一个好的选择,它会在您的应用程序中创建一个安全漏洞,并且当它被利用时,您的老板会被顶起。

答案 1 :(得分:0)

如果您在Java中执行此操作,我建议遵循面向对象的原则。不要像C那样编写Java代码。 您可以创建具有以下字段的Person对象:

    private String name;
    private String address1;
    private String address2;
    private String phone;
    private String email;

构造

 Person(String name, String address1, String address2, String phone, String email) {
        this.name = name;
        this.address1 = address1;
        this.address2 = address2;
        this.phone = phone;
        this.email = email;
    }

和吸气鬼一样

public String getName() {
    return this.name;
}

表示每个属性。 之后在userInput中写

return new Person(name, address1, address2, phone, email);

因此,userInput现在返回Person的实例。 将createDatabase方法拆分为两部分: 第一种方法应该处理数据库创建 第二种方法应该处理插入。 实施例

public void insertInDatabase(Statement st, Person p) {
   // here you can use code that others have posted.
}

作为结论:请学习Java指南和原则,然后尝试用它来构建一些东西,因为如果你学习它很愚蠢,你会用它愚蠢。 对不起,如果有任何进攻!