【问题标题】:Java MySQL query issueJava MySQL 查询问题
【发布时间】: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


【解决方案1】:

您不能使用executeQuery 执行INSERT 查询,该查询用于返回结果的查询;

换句话说;

stmt.executeQuery(queries.newEmpInsert());

应该改用executeUpdate

stmt.executeUpdate(queries.newEmpInsert());

【讨论】:

  • 谢谢!!!!那行得通。我仍然收到错误,但我应该可以从这里拿走它!只是 MySql 错误,例如“默认值”等等。再次谢谢你。如果我可以投票,我会
猜你喜欢
  • 2011-11-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
相关资源
最近更新 更多