【发布时间】:2014-04-27 15:57:46
【问题描述】:
所以我的查询将无法正常工作。我也明白,因为我没有使用可能导致 mySQL 注入的准备好的语句。继续前进,每次我运行这个问题时都会出现错误。 也只是提醒一下,这是为了学校作业 - 也就是我确定我的编码风格可能充其量是低于标准的,但我正在努力!
public String newEmpInsert() {
return newEmpInsert;
}
private String newEmpInsert = "INSERT INTO empInfo"
+ "(firstName, lastName, SSN, address, salary, pin, empLevel, contactInfo) "
+ "VALUES ('"+firstName+"', '"+lastName+"', '"+SSN+"', '"+address+"', '"+salary+"',"
+ "'"+pin+"', '"+empLevel+"', '"+contactInfo+"')";
所有用于设置的变量都是通过中间人代码所在类中的 getter 和 setter 设置的
public void newEmpInsert() {
// SQL Connection
Connection conn = null;
try {
conn = MySQL_connection_test.getConnection();
// Create a statement
Statement stmt = conn.createStatement();
stmt.executeQuery(queries.newEmpInsert());
}
catch (SQLException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
System.out.println("--------->>Invalid query!!!!<<--------------");
System.out.println("Your query has an error, please try again!!");
}
// Close the connection
//VERY IMPORTANT!!
finally {
try {
conn.close();
}
catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Database closed");
}
}
我确信变量设置正确,因为在我的主要操作中我做了以下......
public class TESTPACKAGE {
public static void main(String[] args) {
//declare a new instance of the procedures
SqlProcedures procedures = new SqlProcedures();
procedures.queries = new Queries();
//use the setters
procedures.queries.setFirstName("Anthony");
procedures.queries.setLastName("inner");
procedures.queries.setSSN(123451235);
procedures.queries.setAddress("1300 S Farmview");
procedures.queries.setSalary(18.00);
procedures.queries.setPin(1234);
procedures.queries.setEmpLevel(2);
procedures.queries.setContactInfo("1254569133");
System.out.println(procedures.queries.getFirstName());
System.out.println(procedures.queries.getLastName());
System.out.println(procedures.queries.getSSN());
System.out.println(procedures.queries.getAddress());
System.out.println(procedures.queries.getSalary());
System.out.println(procedures.queries.getPin());
System.out.println(procedures.queries.getEmpLevel());
System.out.println(procedures.queries.getContactInfo());
//execture a query
procedures.newEmpInsert();
}
}
当我运行 getter 以确保一切都正确设置时,它会正确返回。请帮忙,因为这让我发疯!!!
如果您需要更多代码,请告诉我,我会将其包含在内。我认为我包括了所有需要的东西。
再次感谢大家的帮助
【问题讨论】:
-
您需要对所有字符串值使用单引号作为
'"+firstName+"' -
@AbhikChakraborty 答案应该有效(您必须对所有字符串类型的属性都这样做)。不建议使用字符串连接进一步生成 SQL 语句,因为它会打开 SQL 注入的可能性;改为使用准备好的语句。 Hibernate 是处理数据库时广泛使用的机制。
-
@AmilWaduwawara 我同意你的看法!!
-
添加单引号还是报错
-
您收到什么异常类型/消息? NullPointerException 还是某种 SQLException?
标签: java mysql mysql-error-1045