我目前有两个创建的方法,一个名为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();
}
任何帮助和建议,谢谢!
答案 0 :(得分:5)
要插入记录,您应使用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语句绝不是一个好的选择,它会在您的应用程序中创建一个安全漏洞,并且当它被利用时,您的老板会被顶起。
答案 1 :(得分:0)
如果您在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指南和原则,然后尝试用它来构建一些东西,因为如果你学习它很愚蠢,你会用它愚蠢。 对不起,如果有任何进攻!