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

标签 java mysql sql

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

我很想知道如何将变量从 userInput 方法传递到 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());
    }

}

用户输入法

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

}

任何帮助和建议谢谢!

最佳答案

要插入记录,您应该使用 PreparedStatement防止 SQL 注入(inject):

    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 语句从来都不是一个好的选择,它会在您的应用程序中造成安全漏洞,当它被利用时您的老板将被劫持。

关于java - 在 mysql insert 语句中使用 java 变量作为值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20894073/

相关文章:

java - 如何使用Android获取xml中的根元素?

Java 成绩计算器

java - 这句话是什么意思并且......?

c# - 您的 SQL 语法有错误,适用于 .net 的 mysql 连接器

java - Tomcat maven 插件 - 无法加载类 "org.slf4j.impl.StaticLoggerBinder"

java - JDBC程序创建两个不同的连接

MySQL 5.5.24-log 更新查询连接

sql - 执行以字符串命名的存储过程

sql - 如何在 PostgreSQL 9.1 数据库中删除多个触发器

MySQL:显示前 5 个父行的最后一个子行(没有重复的父行)