1.
public static void insertByBatch(int num) {
long d1 = System.currentTimeMillis();
session = HibernateSessionFactory.getSession();
ts = session.beginTransaction();
try {
for (int i = 0; i < num; i++) {
Person p=new Person();
String z=Integer.toString(i);
//p.setId(z);
p.setName(z);
session.save(p);if (i % 50 == 0) {
session.flush();
session.clear();
}
if(i%500==0){
System.out.println("提交一次");
ts.commit();
}
}
ts.commit();
} catch (Exception e) {
e.printStackTrace();
ts.rollback();
} finally {
if (session != null) {
HibernateSessionFactory.closeSession();
}
}
long d2 = System.currentTimeMillis();
System.out.println("用时为:" + (d2 - d1));
}
结果数据库里面就只有一条数据??
org.hibernate.TransactionException: Transaction not successfully started异常2. 
hibernate怎么设置自动提交
jdbc:conn.setattribute(false);
hibernate???3.  
3.1.在循环里面加个
if(i/50==0){
session.flush();
session.clear();
}
3.2
hibernate.cfg.xml配置文件里面的
<property name="jdbc.batch_size">50</property>语句
这2种方法是不是只要一个就可以了,还是2个都加上去?
4.
public void insertByBatch(int num) {
//conn.setAutoCommit(false);
long d1 = System.currentTimeMillis();
int z=num+1;
try {
//i<1000
conn.setAutoCommit(false);
for (int i = 0; i < num / 50; i++) {
for (int j = 0; j < 50; j++) {
String sql = "insert into t_person values(?,?)";
pstmt = conn.prepareStatement(sql);
String s = Integer.toString(--z);
pstmt.setString(1, s);
pstmt.setString(2, s);
pstmt.addBatch();
System.out.println(z);
}
pstmt.executeBatch();
conn.commit();
}} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long d2 = System.currentTimeMillis();
System.out.println("执行时间为: " + (d2 - d1));
}
最后结果只插入1000条
怎么不是5万条呀?

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【sean1203】截止到2008-07-10 09:31:15的历史汇总数据(不包括此帖):
    发帖的总数量:1                        发帖的总分数:10                       每贴平均分数:10                       
    回帖的总数量:8                        得分贴总数量:3                        回帖的得分率:37%                      
    结贴的总数量:0                        结贴的总分数:0                        
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:1                        未结的总分数:10                       
    结贴的百分比:0.00  %               结分的百分比:0.00  %                  
    无满意结贴率:---------------------无满意结分率:---------------------
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
      

  2.   

    public static void insertByBatch(int num) {
    long d1 = System.currentTimeMillis();
    Session session = HibernateSessionFactory.getSession();
    Transaction ts = null;
    int z = num + 1;
    try {
    for (int i = 0; i < num; i++) {
    ts = session.beginTransaction();
    Person p = new Person();
    String s = Integer.toString(--z);
    p.setId(s);
    p.setName(s);
    session.save(p); if (i / 50 == 0) {
    session.flush();
    session.clear();
    }
    if (i / 500 == 0) {
    System.out.println("提交一次");
    ts.commit();
    }
    }
    ts.commit();
    } catch (Exception e) {
    e.printStackTrace();
    ts.rollback();
    } finally {
    if (session != null) {
    HibernateSessionFactory.closeSession();
    }
    }
    long d2 = System.currentTimeMillis();
    System.out.println("用时为:" + (d2 - d1));
    }
    为什么这样就错啦?
    public static void insertByBatch(int num) {
    long d1 = System.currentTimeMillis();
    Session session = HibernateSessionFactory.getSession();
    Transaction ts = session.beginTransaction();
    int z = num + 1;
    try {
    for (int i = 0; i < num; i++) {

    Person p = new Person();
    String s = Integer.toString(--z);
    p.setId(s);
    p.setName(s);
    session.save(p); if (i / 50 == 0) {
    session.flush();
    session.clear();
    }
    if (i / 500 == 0) {
    System.out.println("提交一次");
    ts.commit();
    }
    }
    ts.commit();
    } catch (Exception e) {
    e.printStackTrace();
    ts.rollback();
    } finally {
    if (session != null) {
    HibernateSessionFactory.closeSession();
    }
    }
    long d2 = System.currentTimeMillis();
    System.out.println("用时为:" + (d2 - d1));
    }