我目前有两个创建的方法,一个名为 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/