【问题标题】:Update query for java JDBC +mysql databasejava JDBC+mysql数据库的更新查询
【发布时间】:2015-03-28 07:54:23
【问题描述】:

我正在尝试对表医生运行更新查询。表的主键定义为复合主键(deptid、docid)。我要做的是根据 deptid 和 docid (通过另一个查询)更新字段名称、资格和时间。 我相信我正在做一些非常愚蠢的事情,但我找不到它。有人可以帮忙吗?

String did= request.getParameter("text1");
String dname = request.getParameter("text2");
String desig = request.getParameter("text3");
String qualification = request.getParameter("text4");
String time = request.getParameter("text5");

String className = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://192.168.10.13";
String user = "root";
String password = "";

PreparedStatement ps;
ResultSet rs;

try {
    Class.forName(className);                
    Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/webhospital","root","");
    //        PreparedStatement prepStmt = (PreparedStatement) conn.prepareStatement("Select * from tbl_userinfo");
    ps = (com.mysql.jdbc.PreparedStatement) con.prepareStatement("update doctors set Designation=?,Qualification=?,Time= ? where deptid =? and docid IN(select docid from doctors where doctorname='dname';)");
    ps.setString(1, did);
    ps.setString(3,desig);
    ps.setString(4,qualification);
    ps.setString(5,time);
    ps.executeUpdate();
}  catch (ClassNotFoundException cx) {
    out.println(cx);
} catch (SQLException ex) {
    Logger.getLogger(MysqlInsertServlet.class.getName()).log(Level.SEVERE, null, ex);
}

【问题讨论】:

    标签: java mysql sql jdbc


    【解决方案1】:
     ps = (com.mysql.jdbc.PreparedStatement) con.prepareStatement("update doctors set Designation=?,Qualification=?,Time= ? where deptid =? and docid IN(select docid from doctors where doctorname='dname';)");
                ps.setString(1, did);
                ps.setString(3,desig);
                ps.setString(4,qualification);
                ps.setString(5,time);
    

    您有 4 个问号,但设置错误,为什么您不设置如下:

    ps.setString(1, desig);
                    ps.setString(2,qualification);
                    ps.setString(3,time);
                    ps.setString(4,deptId);
    

    Supplying Values for PreparedStatement Parameters

    您必须提供值来代替问号占位符(如果 有任何),然后才能执行 PreparedStatement 对象。做 这通过调用定义在 PreparedStatement 类。以下语句提供了两个 PreparedStatement 中名为 updateSales 的问号占位符:

    updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey());

    每个 setter 方法的第一个参数指定 问号占位符。在本例中,setInt 指定第一个 placeholder 和 setString 指定第二个占位符。

    【讨论】:

    • 您不知道指出该命令对您有多大帮助!多谢。它现在工作
    【解决方案2】:

    您的查询中需要进行的一项更改是

    "where doctorname='dname';)" ==>> "where doctorname='"+dname+"';)"

    【讨论】:

    • 没有工作.. ps = (com.mysql.jdbc.PreparedStatement) con.prepareStatement("更新医生设置指定=?,Qualification=?,Time= ? where deptid =? and docid IN (select docid from doctorname='"+dname+"';)");
    • 如果您没有得到任何编译时/运行时错误,则意味着您的查询负责更新。仅检查您的查询。
    【解决方案3】:

    我认为不编辑你的代码给你看一个简单的例子是很好的。

        PrintWriter out = response.getWriter();
        String Title = request.getParameter("Title");
        String Artist = request.getParameter("Artist");
        String Country = request.getParameter("Country");
        String price = request.getParameter("price");
        String Year = request.getParameter("Year");
    
        try {
            //loading driver 
    
            Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
    
            //creating connection with the database 
            Connection con = DriverManager.getConnection("jdbc:derby://localhost:1527/sample", "app", "app");
    
            PreparedStatement ps = con.prepareStatement("update COMPACT_DISK set TITLE=?,ARTIST=?,COUNTRY=?,PRICE=?,YEARS=? where TITLE=?");
    
            ps.setString(1, Title);
            ps.setString(2, Artist);
            ps.setString(3, Country);
            ps.setString(4, price);
            ps.setString(5, Year);
            ps.setString(6, Title);
            int i = ps.executeUpdate();
            if (i > 0) {
                out.println("Compact disk successfully inserted");
            }
        } catch (Exception se) {
            out.println("Error Occured : \n" + se.getLocalizedMessage());
            se.printStackTrace();
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多