java - JDBC 如何在带有 where 子句的准备好的语句中使用占位符?

标签 java mysql jdbc prepared-statement

我很难理解为什么这不起作用,如果我直接在 MySQL 控制台中输入完全相同的内容,它会接受它,但当我尝试运行它时,它会报告语法错误。

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 1 行 '= '6'' 附近使用的正确语法

我想做的就是接收行中的数据,其中包含用户输入的member_id 值。出于测试目的,该值始终为 6,我尝试将其解析为 int 而不是字符串,这给出了相同的错误,并且我尝试将 ID 变量添加到字符串的末尾而不是使用占位符,但它没有也不那么喜欢。

这是代码:

public class MemberDAO {

public PreparedStatement ps = null;
public Connection dbConnection = null;

public List<Member> getMembersDetails(String ID) throws SQLException{

    List<Member> membersDetails = new ArrayList();

    String getMembershipDetails = "SELECT first_name, last_name, phone_number, email, over_18, date_joined, date_expire, fines FROM members"
            + "WHERE member_id = ?";

    try {
        DBConnection mc = new DBConnection();
        dbConnection = mc.getConnection();
        ps = dbConnection.prepareStatement(getMembershipDetails);

        ps.setString(1, ID);
        ps.executeQuery();

        ResultSet rs = ps.executeQuery(getMembershipDetails);


        String firstName = rs.getString("first_name");
        String lastName = rs.getString("last_name");
        String phoneNumber = rs.getString("phone_number");
        String email = rs.getString("email");
        String over18 = rs.getString("over_18");
        String dateJoined = rs.getString("date_joined");
        String dateExpired = rs.getString("date_expire");
        String fines = rs.getString("fines");

        Member m;
        m = new Member(firstName, lastName, phoneNumber, email, over18, dateJoined, dateExpired, fines);
        membersDetails.add(m);


    }  catch (SQLException ex){
        System.err.println(ex);
        System.out.println("Failed to get Membership Details.");
        return null;
    } finally{
        if (ps != null){
            ps.close();
        }
        if (dbConnection != null){
            dbConnection.close();
        }
    } return membersDetails;
}

这就是它的名字:

private void btnChangeCustomerActionPerformed(java.awt.event.ActionEvent evt) {                                                  

    customerID = JOptionPane.showInputDialog(null, "Enter Customer ID.");

    MemberDAO member = new MemberDAO();
    try {
        List membersDetails = member.getMembersDetails(customerID);

        txtFullName.setText(membersDetails.get(0) + " " + membersDetails.get(1));
    } catch (SQLException ex) {
        System.err.println(ex);
        System.out.println("Failed to get Details.");
        JOptionPane.showMessageDialog(null, "Failed to retrieve data.");
    }
}    

欢迎任何意见。

最佳答案

您的查询缺少空格:

...fines FROM members"
        + "WHERE...

将会导致

 FROM membersWHERE

哪个 SQL 无效

更改为

 + " WHERE....

关于java - JDBC 如何在带有 where 子句的准备好的语句中使用占位符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24840038/

相关文章:

java - 如何使用 Stream API Java 8 生成随机整数数组?

java - 在Java中指定File中的相对路径

mysql - 如何在Django中自动切换多个数据库服务器?

mysql - 从外部 MySQL 服务器导入/导出数据库

java - 使用 MySQL 语法在 MySQL Workbench 中存储音频文件/文件路径

java - 帮助在java中解析JSON

mysql - Grails:如何减少数据库查询

mysql - 如何使用限制查询获取特定 ID 的多条记录

java - 将 JDBC ResultSet 映射到对象

java - 在 netbeans 中使用 JTable