帮助解决JDBC问题

时间:2010-07-01 15:42:10

标签: java

这是一个函数,在接受患者表中作为咨询字段的字符串s后,从医生表中返回最小医生ID。例如,如果我在该领域写了“心脏病学”,那么它将返回与该领域相关的最低医生ID。

此外,如果医生是否有空,将根据其现状确定。

默认情况下,医生是免费的,并且在分配后将更改为是。

SQL语句中存在问题。

public int getDocID(String s)
{
    int did = 0;
    try {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection con =
            DriverManager.getConnection("jdbc:odbc:patientDSN");
        Statement stat = con.createStatement();
        ResultSet rs =
            stat.
            executeQuery
            ("select min(Doc_ID) from Doctor where (Doc_CurrentStatus='No' and Doc_Speciality like '%"
             + s + "'%'");
        if (rs.next()) {
            did = rs.getInt(1);
        }
        System.out.println(did);
        PreparedStatement ps1 =
            con.
            prepareStatement
            ("UPDATE Doctor SET Doc_CurrentStatus='Yes' where Doc_ID = "
             + did + "");
        ps1.executeUpdate();
    }

    catch(Exception e) {
        e.printStackTrace();
    }
    return did;
}

1 个答案:

答案 0 :(得分:3)

你有一个

  

引用的不仅仅是你需要的东西。它在最后一个

之前
  

“%”

百分比符号。您也必须关闭最后一个括号。您可能需要查看PrepareStatement。链接到Java Tutorial

   ResultSet rs = stat.executeQuery(
   "select min(Doc_ID) from Doctor where (
        Doc_CurrentStatus='No' and Doc_Speciality like '%"+s+"%'
      )"
  );

您可以执行此查询:

select Doc_ID from Doctor where (Doc_CurrentStatus='No' and Doc_Speciality like '%"+s+"%') ORDER BY Doc_ID ASC LIMIT 1");

可以改善表现。