[英]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.