session = SessionFactory.openSession(); String sql = "from User u where u.name=?"; Query query = session.createSQLQuery(sql);楼主啊 加油
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)
update ass_personuser as ass set status=5 where ass.logonsn=:logonsnPreparedStatement pst = con.prepareStatement(sql); pst.setString(0, logonsn);
update ass_personuser as ass set status=5 where ass.logonsn=:logonsnPreparedStatement pst = con.prepareStatement(sql); pst.setString(“logonsn”, “logonsn”);
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();
//然后如何处理自己搞吧
}
}
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){
}
}}
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语句就行了
我想用sql,但是不用jdbc
想更新啊,
楼上几位说的不错,
我觉得要根据一个字段更新其它几个字段而不是全部字段那最好是先根据这个字段get出来这一条数据,在修改,在insert这样不会丢失其它不需更新的字段
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();
}
}
String sql = "from User u where u.name=?";
Query query = session.createSQLQuery(sql);
Session.createQuery(hql).excuteUpdate();用更新Model的方法也可以。
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)
String sql = "from User u where u.name=?";
Query query = session.createSQLQuery(sql);楼主啊
加油
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)
pst参数有类型区别的,要根据你数据库中的类型,赋值参数,比如int的要用pst.setInt(arg0, arg1);
String sql = "update ass_personuser set status=5 where logonsn=24898144 ";
PreparedStatement pst = con.prepareStatement(sql);
pst.setInt(0, 24898144);//这句话去掉就没有报错了,这里哪里写错了吗 pst.executeUpdate(sql);
PreparedStatement pst = con.prepareStatement(sql);
pst.setString(0, logonsn);
是不是不能这样写呀,不能加?,有没有别的方法
Connection con=session.connection();
PreparedStatement stmt=con.prepareStatement("update CUSTOMERS set AGE=AGE+1 "
+"where AGE>0 ");
stmt.executeUpdate();
tx.commit();
String sql = "update ass_personuser set status=5 where logonsn= "+ a ;
确定logonsn字段的数据类型是否是字符串型的,
PreparedStatement 的占位符从1开始
pst.setString(1, logonsn);
根据一个或多个字段更新表中其他字段。对于这样的问题,你可以根据参照字段抽出要更新对象结果集,然后修改每更新对象中要更新的字段,循环更新就可以了。
不建议用SQL文,这样不利于事务地管理。影响代码结构的可读性。