读书人

java.sql.SQLException: [Microsoft][

发布时间: 2011-11-13 21:39:11 作者: rapoo

hibernate 里写sql的问题
在dao 里public List findByTitles(String title){
String hql="from News as news where news.title like'%"+title+"%'";
List list=getHibernateTemplate().find(hql);
return list;
}用这个方法是没问题的,我想用sql语句实现.

用public List findByTitles(String title){
String sql="select * from news where title like'%"+title+"%'";
Session session=getSession();
Transaction tx=session.beginTransaction();
Query qu=session.createSQLQuery(sql);
tx.commit();
List list=qu.list();
return list;
}方法时报错java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对象名 'news' 无效。
News.hbm.xml:
<hibernate-mapping>
<class name="org.imm.model.News" catalog="news" table="news" schema="dbo">
<id name="newsid" type="java.lang.Integer">
<column name="newid" ></column>
<generator class="native"></generator>
</id>
<property name="title" type="java.lang.String">
<column name="title" length="50"></column>
</property>
<property name="content" type="java.lang.String">
<column name="content" length="50"></column>
</property>
</class>
</hibernate-mapping>
请问怎么解决?

[解决办法]
public List getUserList(){
//调用模板的execute方法,参数是实现了HibernateCallback接口的匿名类,
return (List) this.execute(new HibernateCallback(){
//重写其doInHibernate方法返回一个object对象,
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
//创建query对象
Query query=session.createSQLQuery("select * from table");
//返回其执行了分布方法的list
return query.list();
}
});
}
[解决办法]
可以参考一下

/*根据库房Id和储位编码查询货物信息*/
public List findGoodsByWarehouseSlotCode(String warehouseId,String slotCode){
log.debug("finding WmsStockSlot instance with property:warehouseId " + warehouseId
+ ", stockCode: " + slotCode);
try {
String queryString = "SELECT * FROM WMS_STOCK_SLOT ss,WMS_BASE_GOODS g,WMS_BASE_GOODS_STATUS s WHERE ss.STOCK_GOODS_ID=g.GOODS_ID AND ss.STOCK_GOODS_STATUS=S.GOODS_STATUS_ID AND ss.STOCK_WAREHOUSE_ID=? AND ss.STOCK_SLOT_CODE=?";
Query queryObject = getSession().createSQLQuery(queryString).addEntity("stockSlot",WmsStockSlot.class).addEntity("goods",WmsBaseGoods.class).addEntity("goodsStatus",WmsBaseGoodsStatus.class);
queryObject.setParameter(0, warehouseId);
queryObject.setParameter(1, slotCode);
return queryObject.list();
} catch (RuntimeException re) {
log.error("find by property name failed", re);
throw re;
}
}
[解决办法]
数据库发生了异常,你的sql语句有问题
String sql="form News n where n.title like'%"+title+"%'";
还有 别忘了关闭事务和session
[解决办法]
一般做Hibernate查询时不需要开启Transaction

public List findByTitles(String title){
String sql="select * from news where title like'%"+title+"%'";


Session session=getSession();
Transaction tx=session.beginTransaction();
Query qu=session.createSQLQuery(sql);
tx.commit(); //---放到后面去
List list=qu.list();
//tx.commit(); --放这里
return list;
}

算了,我在写一遍
public List findByTitles(String title){
Session se= getSession();
List list=new ArrayList();
String sql="select * from news where title like '%"+title+"%'";
try{
Query qu=session.createSQLQuery(sql);
list=qu.list();
}catch(Exception e){
e.printStackTrace();
}finally{
se.close();//must close
return list;
}
}


[解决办法]
在唆一句,要养成良好的代码习惯
做到有始有终
打开的东西给它关闭掉
Session必须的关,要不然运行个几十次,你电脑就不动了
哈哈。。。
[解决办法]
把你表里的属性写出来或直接
from news where title like'%"+title+"%'";
[解决办法]
最外层的查询 hibernate是不支持select * 的 必须用from 如果是里面嵌套的子查询可以用select
例如:
from CourseCatalog c where c.courseCatalogId in (select cc.courseCatalog.courseCatalogId from CourseCatalogPrivilege cc where cc.user.userId=:userId )
[解决办法]
同意楼上的!!

createSQLQuery(sql);
//加载实体对象
Query query= sessss.createSQLQuery("select{cat.*}fromcatscat").addEntity("cat",Cat.class).list(); //条件是cat 返回值集合query

属于SQL条件查询。。。。你可以用BQC来完成条件查询 速度不次于SQL语句!!

你使用的SQL语句可以配置在new.hbm.xml
<sql-query name = " persons " >
 < return alias = " person "  class = " eg.Person " />
Select person.NAME AS {person.name},person.AGE AS {person.age},person.SEX AS {person.sex} FROM PERSON person Where person.NAME LIKE :namePattern
</sql-query>


List people = sess.getNamedQuery( " persons " ).setString( " namePattern " , namePattern)
.setMaxResults( 50 )
.list();
[解决办法]
public List findByTitles(String title){
Session se= getSession();
List list=new ArrayList();
String sql="select * from News n where n.title like '%"+title+"%'";
try{
Query qu=session.createSQLQuery(sql);
list=qu.list();
}catch(Exception e){
e.printStackTrace();
}finally{
se.close();//must close
return list;
}
}
注意类名,报的是hibernate找不到类名而已。。不关SQL的事。
[解决办法]

Java code
public CstLinkman findByDel(String lkmCustName,String lkmName){        Criteria criteria=getSession().createCriteria(类名.class);        criteria.add(Expression.eq("lkmCustName", lkmCustName));        criteria.add(Expression.eq("lkmName", lkmName));        List<类名> list=criteria.list();        if(list.size()==0){            return null;        }        类名 cstLinkman=list.get(0);        return cstLinkman;    }
[解决办法]
List中的每个元素 此时都是一个对象数组 ,每个对象数组的每个元素对象与这个对象所对应的表的每个字段的值
String sql="select * from news where title like'%"+title+"%'";
Session session=getSession();
Transaction tx=session.beginTransaction();
Query qu=session.createSQLQuery(sql);
List list=qu.list();

for(Iterator iter = list.iterator(); iter.hasNext();){
Object [] obj = (Object[])iter.next();


<!-- obj[0],obj[1],obj[2],分别代表这个表的前三个字段-->
System.out.println(obj[0] + " " + obj[1] + " " +obj[2]);

}

这样遍历一下看看会会不错 反正我的电脑没出毛病

读书人网 >J2EE开发

热点推荐