我有一张表,能不能跟据一个字段更新另一个字段?

解决方案 »

  1.   

    hibernate 也支持标准sql的,不用hql就可以啦
      

  2.   

    Query query = session.createSQLQuery("你的sql");
      

  3.   

    你别说你连怎么创建session都不会
      

  4.   


    import java.util.List;import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;public class aaaa {
    private static Configuration con;
    private static SessionFactory sf;
    private static Session session;
      public static void main(String[] args) throws Exception { 
     con = new Configuration().configure();
     sf = con.buildSessionFactory();
     session = sf.openSession();
     //注意此处的sql 中的表名要用model重定义的类名,比如user表对应的model类User
     String sql = "select id from User u where u.name=?";
     Query query = session.createSQLQuery(sql);
     //此处为第一问号赋值的位置,如果还有则,0,1,2一直延续下去
     query.setString(0, "name");
     //用list去接收查处的东西
     List list = query.list();
     //然后如何处理自己搞吧
      }
    }
      

  5.   

    是这样的,我想跟据一个字段,更新几个字段 ,用sql怎么写呀,不用hql,
      

  6.   

    那你何必用hibernate呢,直接jdbc 就可以啦,hibernate是吧一条数据当做一个对象,你可以先根据id把你要更新的数据以对象形式抽出来,然后用get方法,跟你要的结果比对,如果呵呵条件,就修改当前字段,然后session.update(对象)。
      

  7.   

    给你个sql写个例子:自己研究一下吧import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    public class DB {
    private String user ="emvdb" ;
    private String pwd ="emv123" ;  
    private String url = "jdbc:informix-sqli://localhost:8888/emv:INFORMIXSERVER=ol_cxsdk";
    private Connection con ;
    public DB() throws ClassNotFoundException{
    try {
    Class.forName("com.informix.jdbc.IfxDriver"); 
    con = DriverManager.getConnection(url,user,pwd);
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    }
    }
    public static void main(String[] args) throws ClassNotFoundException{
    DB db = new DB();
    Connection con = db.con;
    try{
    String sql = "update tablename set zd1 =? ,zd2=? where zd3=?";
    PreparedStatement pst = con.prepareStatement(sql);
    pst.setString(0, "zd1");
    pst.setString(1, "zd2");
    pst.setString(2, "zd3");
    pst.executeUpdate(sql);
    }catch(Exception e){

    }


    }}
      

  8.   

    对啊,你就写hql呗,dao中创建一个:
    public List getHqlList(String queryString)
        {
         List list = null;
        
            try
            {
             Session session = getSession();
                Query query = session.createQuery(queryString);  
                
                list = query.list();
            }
            catch(Exception e)
            {
             e.printStackTrace();
             return null;
            }
            
            return list;
        }
    在你的实现层中利用这个方法,String queryString就写你的sql语句就行了
      

  9.   

    不是,不能用jdbc,经理不让用,无论怎么用 hql,sql,只要能根据一个字段查出另一个字段就行了,
    我想用sql,但是不用jdbc 
      

  10.   

    那就用hql啊,看上面hql例子啊,你先要把你要把修改的数据抽出来,那个list就是你要修改的对象,然后迭代修改每个对象的相应字段,最后在session.update(对象),这样就行了
      

  11.   

    哦还有这样的事呵呵,你们经理是不是不同般啊,
    想更新啊,
    楼上几位说的不错,
    我觉得要根据一个字段更新其它几个字段而不是全部字段那最好是先根据这个字段get出来这一条数据,在修改,在insert这样不会丢失其它不需更新的字段
      

  12.   

    哎,全给你写出来吧,如果你在看不懂,那我也没办法了import java.util.Iterator;
    import java.util.List;import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;public class aaaa {
    private static Configuration con;
    private static SessionFactory sf;
    private static Session session;
      public static void main(String[] args) throws Exception { 
     con = new Configuration().configure();
     sf = con.buildSessionFactory();
     session = sf.openSession();
     //注意此处的sql 中的表名要用model重定义的类名,比如user表对应的model类User
     String sql = "select id from User u where u.name=?";
     String hql = "delete from User where id=?";
     Query query = session.createSQLQuery(sql);
     //此处为第一问号赋值的位置,如果还有则,0,1,2一直延续下去
     query.setString(0, "name");
     //用list去接收查处的东西
     List list = query.list();
     //然后如何处理自己搞吧
     Iterator it = list.iterator();
     //循环迭代
     while(it.hasNext()){
     User user = (User)it.next();
     //这里就是你要修改的字段啊,多个,你要都写出来
     user.setAge("男");
     //然后更新回去
     session.update(user);
     }
     session.close();
      }
    }
      

  13.   

    不好意思,有点小错,sql那里
    String sql = "from User u where u.name=?";
    Query query = session.createSQLQuery(sql);
      

  14.   

    String hql = "update model1 set model1.name = 'newName' where medel.id = '你查出来的ID' ";
    Session.createQuery(hql).excuteUpdate();用更新Model的方法也可以。
      

  15.   


    Connection  con=    session.connection();

    String sql = "update  ass_personuser  set status=2 where logonsn=? ";
                PreparedStatement pst = con.prepareStatement(sql);
                pst.setString(0, logonsn);
               
                pst.executeUpdate(sql);
    会报这个错 org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:545)
    com.comstars.struts.sys.AssRequestProcessor.processActionPerform(AssRequestProcessor.java:58)
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    com.comstars.struts.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:66)
     
      

  16.   

    session = SessionFactory.openSession();
    String sql = "from User u where u.name=?"; 
    Query query = session.createSQLQuery(sql);楼主啊
    加油
      

  17.   

    java.sql.SQLException: 无效的列索引
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:207)
    at oracle.jdbc.driver.OraclePreparedStatement.setStringInternal(OraclePreparedStatement.java:5264)
      

  18.   

    pst.setString(0, logonsn); 
    pst参数有类型区别的,要根据你数据库中的类型,赋值参数,比如int的要用pst.setInt(arg0, arg1);
      

  19.   

    用hibernate 原生sql 就不可以了
      

  20.   

    Connection  con=    session.connection();

    String sql = "update  ass_personuser  set status=5 where logonsn=24898144 ";
                PreparedStatement pst = con.prepareStatement(sql);
                 pst.setInt(0, 24898144);//这句话去掉就没有报错了,这里哪里写错了吗            pst.executeUpdate(sql);
      

  21.   

    String sql = "update  ass_personuser  set status=5 where logonsn=? ";
                PreparedStatement pst = con.prepareStatement(sql);
                 pst.setString(0, logonsn);
    是不是不能这样写呀,不能加?,有没有别的方法 
      

  22.   

    17楼的答案是一种思路,你也可以这样:tx = session.beginTransaction();
    Connection con=session.connection();
    PreparedStatement stmt=con.prepareStatement("update CUSTOMERS set AGE=AGE+1 "
    +"where AGE>0 ");
    stmt.executeUpdate();
    tx.commit();
      

  23.   

    你可以在外面定义参数啊,传进来的啊int a = “参数”;
    String sql = "update  ass_personuser  set status=5 where logonsn= "+ a ; 
      

  24.   


    确定logonsn字段的数据类型是否是字符串型的,
    PreparedStatement 的占位符从1开始
    pst.setString(1, logonsn);
      

  25.   

    update  ass_personuser as ass  set status=5 where ass.logonsn=:logonsnPreparedStatement pst = con.prepareStatement(sql); pst.setString(0, logonsn); 
      

  26.   

    update ass_personuser as ass set status=5 where ass.logonsn=:logonsnPreparedStatement pst = con.prepareStatement(sql); pst.setString(“logonsn”, “logonsn”);
      

  27.   

    1。看了这么多帖子,估计你现在写的应该是乱78糟的,你这个项目用地是什么结构,是SSH,还是只有数据库部分用了hibernate。发一个你们项目其他的数据库更新方法上来,大家在改 我看能好一点。2。提议,你最好能搞清楚你的数据库连接是怎么配置地。3。解决问题思路:
      根据一个或多个字段更新表中其他字段。对于这样的问题,你可以根据参照字段抽出要更新对象结果集,然后修改每更新对象中要更新的字段,循环更新就可以了。
    不建议用SQL文,这样不利于事务地管理。影响代码结构的可读性。