我通过读取第一个数据库 [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连接正确的架构并访问该表,如果是,那么什么?
答案 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]