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