| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 509 人关注过本帖
标题:求助,经检查,JDBC程序里面的executeBatch ( )语句没有执行,为什么?
只看楼主 加入收藏
csy294745333
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2012-3-27
结帖率:9.09%
收藏
已结贴  问题点数:10 回复次数:3 
求助,经检查,JDBC程序里面的executeBatch ( )语句没有执行,为什么?
程序代码:
import java.sql.BatchUpdateException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.SQLWarning;
import java.sql.Statement;

public class SimpledBatch
{
    public static void main ( String [ ] args ) throws Exception
    {
        // 加载ODBC驱动器
        Class.forName ( "com.microsoft.sqlserver.jdbc.SQLServerDriver" );
        String url = "jdbc:sqlserver://localhost:1433;DatabaseName=MyDB";
        String usr = "sa";
        String password = "chensy";
        Connection con = DriverManager.getConnection ( url , usr , password );
        if ( con == null )
            System.out.println ( "can not establish connection" );
        else
        {
            System.out.println ( "connection is established." );
            SQLWarning w = con.getWarnings ( );
            if ( w != null )
            {
                w.printStackTrace ( );
            }
            while ( w != null )
            {
                String logMessage = "an SQLWarning occurred:" + w.getMessage ( ) + "error code:" + w.getErrorCode ( ) + "SQLState:" + w.getSQLState ( ) + "\n";
                System.out.println ( logMessage );
                w = w.getNextWarning ( );
            }
            try
            {
                Statement sta = con.createStatement ( );
                int rc = 0;
                rc = sta.executeUpdate ( "CREATE TABLE student(" + "SNO INTEGER," + "SNAME CHAR(10)," + "SAGE INTEGER," + "SDEPT CHAR(10))" );
                con.setAutoCommit ( false );
                sta.addBatch ( "insert into student" + "values(1,'张三',18,'计算机')" );
                sta.addBatch ( "insert into student" + "values(2,'李四',19,'信息')" );
                sta.addBatch ( "insert into student" + "values(3,'王五',18,'计算机')" );
                sta.addBatch ( "insert into student" + "values(4,'赵六',20,'信息')" );

                // 未执行
                int [ ] updateCount = sta.executeBatch ( );
                // 未执行

                System.out.println ( "测试" );
                 ( );
                con.setAutoCommit ( true );
                System.out.println ( "Update counts:" );
                for ( int i = 0 ; i < updateCount.length ; i ++ )
                {
                    System.out.println ( updateCount [ i ] );
                }
                ResultSet rset = sta.executeQuery ( "select * from student where sdept='计算机'" );
                while ( rset.next ( ) )
                {
                    int number = rset.getInt ( 1 );
                    String name = rset.getString ( 2 );
                    int age = rset.getInt ( 3 );
                    String dept = rset.getString ( 4 );
                    System.out.println ( "学号:" + number + "姓名:" + name + "年龄:" + age + "所在系:" + dept );
                }
                rset.close ( );
                sta.close ( );
                con.close ( );
            } catch ( BatchUpdateException se )
            {
                con.rollback ( );
            } catch ( SQLException se )
            {
                con.rollback ( );
                se.printStackTrace ( );
                while ( se != null )
                {
                    String logMessage = "an SQL Error occurred:" + se.getMessage ( ) + "error code:" + se.getErrorCode ( ) + "SQLState:" + se.getSQLState ( ) + "\n";
                    System.out.println ( logMessage );
                    se = se.getNextException ( );
                }
            } finally
            {
                con.close ( );
            }
        }
    }
}



测试了一下就是卡在executeBatch ( )那句话了,已经标出来了,求助
2013-12-11 15:27
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:5 
不知道你的未执行是什么意思,不过从代码上猜测可能是抛异常了,建议你在各种catch中将异常信息的log输出,看看是断在那个环节了。

淘宝杜琨
2013-12-13 12:51
FeiJ
Rank: 2
等 级:论坛游民
帖 子:18
专家分:62
注 册:2013-8-2
收藏
得分:5 
con.setAutoCommit ( false );这句话是什么意思。
这是开启或关闭自动提交模式:

con.setAutoCommit(false) ;
 con.setAutoCommit(true) ;  
一旦关闭了自动提交,除非通过调用 commit() 显式地告诉它提交语句,否则无法提交 SQL 语句(即,数据库将不会被持久地更新)。在提交之前的任何时间,我们都可以调用 rollback() 回滚事务,并恢复最近的提交值(在尝试更新之前)。

怎么找我,加771120028告诉你
2013-12-16 11:08
FeiJ
Rank: 2
等 级:论坛游民
帖 子:18
专家分:62
注 册:2013-8-2
收藏
得分:0 
给的建议是把这个con.setAutoCommit(false) 改为con.setAutoCommit(true);

怎么找我,加771120028告诉你
2013-12-16 11:08
快速回复:求助,经检查,JDBC程序里面的executeBatch ( )语句没有执行,为什么? ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018154 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved