簡體   English   中英

在mysql insert語句中使用Java變量作為值

[英]Using java variables as values in mysql insert statement

我目前有兩種創建的方法,一種名為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();

}

任何幫助和建議,謝謝!

要插入記錄,您應該使用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語句從來都不是一個好選擇,它會在您的應用程序中創建一個安全漏洞,並且當老板被利用時會被劫持。

如果您使用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准則和原則,然后嘗試用它來構建某些東西,因為如果您學習它是愚蠢的,那么您將使用它是愚蠢的。 對不起,如果有任何冒犯!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM