自己写的DAO类:package showcars.actionBeans;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import showcars.pojobeans.*;
import java.util.List;
public class TestDAO {
Configuration conf;
SessionFactory factory;
Session session;
Transaction tr;
public TestDAO(){
this.doConfiguration();
}
public void doConfiguration(){
this.conf=new Configuration();
conf.configure("showcars/actionBeans/hibernate.cfg.xml");
this.factory=conf.buildSessionFactory();
}
public void closeSession(){
tr.commit();
session.close();
}
public void openSession(){
session=factory.openSession();
tr=session.beginTransaction();
}
public void showcars(){
this.openSession();
try{
Query query=session.createQuery("from Car");
List<Car> list=query.list();
Car car=(Car)query.list().get(0);
System.out.println("the first car is :"+car.getName()+" "+car.getFactory()+" "+car.getPrice());
for(int i=0;i<list.size();i++){
Car c=(Car)list.get(i);
System.out.println(c.getName()+" "+c.getFactory()+" "+c.getPrice()+"\n");
}
}
catch(Exception e){
System.out.println("no cars");
e.printStackTrace();
}
this.closeSession();
}
public void saveCars(){
this.openSession();
Car car1=new Car();
car1.setName("奥迪");
car1.setFactory("德国");
car1.setPrice(20);
session.save(car1);
this.closeSession();
}
public void deleteCars(){
this.openSession();
try{
Car car2=(Car)session.load(Car.class,new Integer(1));
session.delete(car2);
}
catch(Exception er){
er.printStackTrace();
}
}
public void updateCars(){
this.openSession();
Car car3=(Car)session.load(Car.class,new Integer(2));
car3.setName("奔驰");
car3.setFactory("德国大众");
car3.setPrice(21);
session.update(car3);
this.closeSession();
}
}
pojo类:
ackage showcars.pojobeans;public class Car implements java.io.Serializable{
private int id;
private String name;
private String factory;
private int price;
public Car(){}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFactory() {
return factory;
}
public void setFactory(String factory) {
this.factory = factory;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}}
映射文件:<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="showcars.pojobeans">
<class name="showcars.pojobeans.Car" table="cars">
<id column="id" name="id" type="int">
<generator class="native"></generator>
</id>
<property name="name" column="name" type="string"></property>
<property name="factory" column="factory" type="string"></property>
<property name="price" column="price" type="int"></property>
</class>
</hibernate-mapping>
testMain:
package showcars.actionBeans;public class TestMain {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TestDAO test=new TestDAO();
//test.showcars();
//test.deleteCars();
//test.updateCars();
test.saveCars();
}}
调用showcars方法能顺利查询出内容来,但调用其余方法就会报错,如调用saveCars方法就出现异常:Exception in thread "main" org.hibernate.exception.GenericJDBCException: could not insert: [showcars.pojobeans.Car]
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:64)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2176)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2656)
。。
at showcars.actionBeans.TestMain.main(TestMain.java:13)
Caused by: java.sql.SQLException: Incorrect string value: '\xE5\xA5\xA5\xE8\xBF\xAA' for column 'name' at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3558)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3490)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2109)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2648)
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import showcars.pojobeans.*;
import java.util.List;
public class TestDAO {
Configuration conf;
SessionFactory factory;
Session session;
Transaction tr;
public TestDAO(){
this.doConfiguration();
}
public void doConfiguration(){
this.conf=new Configuration();
conf.configure("showcars/actionBeans/hibernate.cfg.xml");
this.factory=conf.buildSessionFactory();
}
public void closeSession(){
tr.commit();
session.close();
}
public void openSession(){
session=factory.openSession();
tr=session.beginTransaction();
}
public void showcars(){
this.openSession();
try{
Query query=session.createQuery("from Car");
List<Car> list=query.list();
Car car=(Car)query.list().get(0);
System.out.println("the first car is :"+car.getName()+" "+car.getFactory()+" "+car.getPrice());
for(int i=0;i<list.size();i++){
Car c=(Car)list.get(i);
System.out.println(c.getName()+" "+c.getFactory()+" "+c.getPrice()+"\n");
}
}
catch(Exception e){
System.out.println("no cars");
e.printStackTrace();
}
this.closeSession();
}
public void saveCars(){
this.openSession();
Car car1=new Car();
car1.setName("奥迪");
car1.setFactory("德国");
car1.setPrice(20);
session.save(car1);
this.closeSession();
}
public void deleteCars(){
this.openSession();
try{
Car car2=(Car)session.load(Car.class,new Integer(1));
session.delete(car2);
}
catch(Exception er){
er.printStackTrace();
}
}
public void updateCars(){
this.openSession();
Car car3=(Car)session.load(Car.class,new Integer(2));
car3.setName("奔驰");
car3.setFactory("德国大众");
car3.setPrice(21);
session.update(car3);
this.closeSession();
}
}
pojo类:
ackage showcars.pojobeans;public class Car implements java.io.Serializable{
private int id;
private String name;
private String factory;
private int price;
public Car(){}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFactory() {
return factory;
}
public void setFactory(String factory) {
this.factory = factory;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}}
映射文件:<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="showcars.pojobeans">
<class name="showcars.pojobeans.Car" table="cars">
<id column="id" name="id" type="int">
<generator class="native"></generator>
</id>
<property name="name" column="name" type="string"></property>
<property name="factory" column="factory" type="string"></property>
<property name="price" column="price" type="int"></property>
</class>
</hibernate-mapping>
testMain:
package showcars.actionBeans;public class TestMain {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TestDAO test=new TestDAO();
//test.showcars();
//test.deleteCars();
//test.updateCars();
test.saveCars();
}}
调用showcars方法能顺利查询出内容来,但调用其余方法就会报错,如调用saveCars方法就出现异常:Exception in thread "main" org.hibernate.exception.GenericJDBCException: could not insert: [showcars.pojobeans.Car]
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:64)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2176)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2656)
。。
at showcars.actionBeans.TestMain.main(TestMain.java:13)
Caused by: java.sql.SQLException: Incorrect string value: '\xE5\xA5\xA5\xE8\xBF\xAA' for column 'name' at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3558)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3490)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2109)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2648)
这个没有问题。
不知道mysql是不是跟ms sql server一样,有char和varchar之分呢。
mysql有char和varchr之分,问题出在哪里呢?急 啊,都两天了。。
汉字编码问题。看下你的mysql中表的 name 字段是什么编码格式? 一般在mysql中新建表时要指定varchar字段的编码格式。你的这个问题是页面获取的中文字符经过编码后跟数据库定义的该字段的编码格式不一样!