如何解决com.microsoft.sqlserver.jdbc.SQLServerException:无效的对象名'dbo.Table2'

时间:2015-07-22 11:31:20

标签: java sql-server sql-server-2008 jdbc

我通过读取第一个数据库 [WBSEDCL]。[dbo]。[Table1] 中的数据,然后将其插入第二个数据库 [来自sql server 2008 DB中的Java数据。 OrganizationMaster]。[dbo]。[表2]
我在我的项目中使用 sqljdbc41.jar
插入代码如下 -

private static Connection getNewDBConnection() {
        System.out.println("************************Inside Get DB Connection**************************");
        Properties props = new Properties();
        if (connection != null)
            try {
                if (!connection.isClosed())
                    return connection;
            } catch (SQLException e) {
                e.printStackTrace();
            }

        try {
            String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
            String url = "jdbc:sqlserver://142.168.0.112:1733;DatabaseName=OrganizationMasterDB";
            String user = "sa";
            String password = "Dsdf@123";
            Class.forName(driver);
            connection = DriverManager.getConnection(url, user, password);
            if (!connection.isClosed())
                System.out.println("---------------------DB Connection is Established----------------------");
        } catch (ClassNotFoundException e) {
            System.out.println("Class Not Found Exception Thrown ");
            e.printStackTrace();
        } catch (SQLException e) {
            System.out.println("SQL Exception Thrown");
            e.printStackTrace();
        }

        return connection;
    }


     public static void insertDetailsList(PersonalLedger pl) {
        Connection conn = getNewDBConnection();
        PreparedStatement statement = null;
        DetailsList dl = null;
        int temp=0,shareAmount=0,shareBalance=0,theiftFundAmount=0,theiftFundInterest=0,GAmtDepo=0,GInterest=0,ShareWithdrawn=0;
        String EmNo=null,MemberNo=null, fundString = "Share",status="Unknown",remarks="OtherAmount for Share is The Withdrawn Share Amount",sql=null;
        boolean flag= false;
        Date sdate = pl.SDate,gdate=pl.Gdate,tdate=pl.TDate;
         EmNo = pl.EmNo;
         MemberNo = pl.MemberNo;
         shareAmount = pl.SAmtDepo;  
         shareBalance = pl.balance;
         ShareWithdrawn = pl.ShareWithdrawn;
         theiftFundAmount = pl.TAmtDepo;
         theiftFundInterest = pl.TInterest;
         GAmtDepo = pl.GAmtDepo;
         GInterest = pl.GInterest;
        DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        Calendar cal = Calendar.getInstance();
        try{
            System.out.println("*****************INSERTING SHARE FUND DETAILS******************");
            sql = "INSERT INTO [dbo].[DetailsList] VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);";
            statement = conn.prepareStatement(sql);
            statement.setString(1, pl.EmNo);
            statement.setString(2, pl.MemberNo);
            statement.setString(3,"Share");
            statement.setLong(4, shareAmount);
            /*Date share_date = (Date) formatter.parse(new Date());*/
            statement.setLong(5,0);
            statement.setLong(6,pl.ShareWithdrawn);
            statement.setString(7,"Unknown");
            statement.setString(8,"OtherAmount for Share is The Withdrawn Share Amount");
            statement.setDate(9, pl.SDate);
            statement.setDate(10,null);
            statement.setLong(11, shareBalance);
            temp = statement.executeUpdate();
            if (temp != 0) {
                flag = true;
                System.out.println("ROW INSERTED SUCCESSFULLY");
            }
        } catch (Exception e) {
            System.out.println("Exception in Insert Details List Items");
            e.printStackTrace();
        }
        }


每当我运行代码时出现问题我得到SQLException。 stackTrace如下:

Exception in Insert Details List Items
com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name 'dbo.DetailsList'.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:215)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1635)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:426)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:372)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5846)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1719)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:184)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:159)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate(SQLServerPreparedStatement.java:315)
at Test.insertDetailsList(Test.java:203)
at Test.main(Test.java:290)

我完全不知道这个错误,并且无法通过网络找到任何相关的问题解决方案!
任何帮助将不胜感激。谢谢。

编辑:在做了一些研究之后,我将Table2移到了第一个数据库,对连接字符串进行了必要的更改并执行了程序。执行的代码没有任何错误。所以问题仍然存在 -
1. 为什么Table2在第二个数据库下时没有找到模式?
2. 数据库中是否需要任何配置为java连接正确的架构并访问该表,如果是,那么什么?

3 个答案:

答案 0 :(得分:2)

假设您的INSERT用于Table2,那么它应该从

更改
sql = "INSERT INTO [dbo].[DetailsList] VALUES "
        + "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);";

包含目标数据库名称。有类似的东西(你不需要在查询中使用分号)

sql = "INSERT INTO [OrganizationMaster].[dbo].[DetailsList] VALUES "
        + "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

答案 1 :(得分:1)

检查表DetailsList存在且用户对此表有权限,您可以检查我从该用户登录到SQL Server管理工作室并尝试访问该表。

答案 2 :(得分:1)

使用[dbname].[dbo].[tblname]查询,例如select * from [dbname].[dbo].[tblname]