สภาพแวดล้อมของฉัน: Eclipse IDE สำหรับ Enterprise Java Developers เวอร์ชัน: 2019-09 R (4.13.0)
เซิร์ฟเวอร์: WildFly 13.0.0. Final
ฉันพยายามอัปโหลดข้อมูลจำนวนมากไปยัง Sql Server และรหัสด้านล่างทำงานได้อย่างสมบูรณ์ในเซิร์ฟเวอร์ WildFly ของฉันที่มีเวอร์ชันเดียวกัน แต่ล้มเหลวในเครื่องเซิร์ฟเวอร์ของไคลเอนต์ที่มีเซิร์ฟเวอร์ wildfly เดียวกันกับ java.lang.ClassCastException: org.jboss.jca.adapters .jdbc.jdk8.WrappedPreparedStatementJDK8 ไม่สามารถส่งไปยัง com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement ในคำสั่งด้านล่าง:
SQLServerPreparedStatement pStmt = (SQLServerPreparedStatement) con.prepareStatement(execStoredProc);
นี่คือรหัสเต็ม:
import com.microsoft.sqlserver.jdbc.SQLServerDataTable;
import com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement;
import java.sql.*;
import java.util.ArrayList;
public class DatabaseExtended extends Database {
public DatabaseExtended(String assetDisposition, String assetDisposition_ds) {
super(assetDisposition, assetDisposition_ds);
// TODO Auto-generated constructor stub
}
public Object executeEstimateStructured(int iClientID, SQLServerDataTable sourceDataTable) {
//boolean rs = false;
ArrayList<String[]> lst = new ArrayList<String[]>();
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection con = DriverManager.getConnection(super.connectionUrl);
Statement stmt = con.createStatement();
String execStoredProc = "EXEC UploadEstimate ?,?";
SQLServerPreparedStatement pStmt = (SQLServerPreparedStatement) con.prepareStatement(execStoredProc);//<--Exception here
pStmt.setInt(1, iClientID);
pStmt.setStructured(2, "dbo.UT_Estimate", sourceDataTable);
ResultSet rs = pStmt.executeQuery();
int columnCount = rs.getMetaData().getColumnCount();
while (rs.next()) {
int i = 1;
String[] cols = new String[columnCount];
while (i <= columnCount) {
cols[i - 1] = rs.getString(i++);
}
lst.add(cols);
}
con.close();
}
catch (SQLException e) {
e.printStackTrace();
}
return lst;
}
}
ใน googling เกี่ยวกับข้อยกเว้นนี้ฉันเจอลิงก์นี้ที่พูดถึงการวางไฟล์ jboss-deployment-structure.xml ในโฟลเดอร์ WEB-INF ด้วยการอ้างอิงที่กล่าวถึง ด้านล่างนี้คือไฟล์ jboss-deployment-structure.xml ของฉัน
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.jboss.ironjacamar.jdbcadapters" slot="main"/>
<module name="com.microsoft.sqlserver" slot="main"/>
</dependencies>
</deployment>
</jboss-deployment-structure>
ฉันได้อ้างถึงไฟล์ mssql-jdbc-7.4.1.jre8.jar ในเส้นทางการสร้างรวมทั้งในโครงสร้างการปรับใช้เพื่อให้มีการเพิ่มการอ้างอิงภายใต้โฟลเดอร์ web-inf / lib
หลังจากวางไฟล์ jboss-deployment-structure.xml นี้ในโฟลเดอร์ web-inf และปรับใช้ไฟล์ war แล้วฉันจะได้รับข้อยกเว้นดังต่อไปนี้ ฉันไม่แน่ใจว่า jboss-deployment-structure.xml ของฉันถูกต้องและวางไว้ในโฟลเดอร์ที่ถูกต้องหรือไม่ คุณสามารถช่วย?
ERROR [io.undertow.request] (default task-5) UT005023: Exception handling request to /AD/control/UploadEstimates: java.lang.IllegalAccessError: tried to access class com.microsoft.sqlserver.jdbc.Util from class com.microsoft.sqlserver.jdbc.SQLServerDataTable
at com.microsoft.sqlserver.jdbc.SQLServerDataTable.addColumnMetadata(SQLServerDataTable.java:83)
at com.MyClient.AD.util.UploadEstimateUT.start(UploadEstimateUT.java:66)
at com.MyClient.AD.util.UploadEstimates.doPost(UploadEstimates.java:107)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68) at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:132) at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60) at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77) at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50) at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest(GlobalRequestControllerHandler.java:68) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292) at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138) at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48) at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
at org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1514) at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1514)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1514) at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1514)
at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81) at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:360)
at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830) at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1985) at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1487)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1378)
at java.lang.Thread.run(Thread.java:748)
นี่คือรหัสที่อัปเดตของฉันโดยใช้คำสั่งแบทช์:
public String executeInboundEstimateBatchedStoredProc(int iClientID, SQLServerDataTable sourceDataTable) {
String message="";
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection con = super.getConnection();
String execStoredProc = "EXEC UploadEstimate ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?";
PreparedStatement pStmt = con.prepareStatement(execStoredProc);
Iterator<Entry<Integer, Object[]>> itr1 = sourceDataTable.getIterator();
while (itr1.hasNext()) {
Object[] lst= itr1.next().getValue();
int numColumns = lst.length;
pStmt.setInt(1, iClientID);
for (int i = 0; i < numColumns; i++) {
pStmt.setString(i+2, lst[i].toString());
}
// add single insert query
pStmt.addBatch();
}
// Execute batch
int[] counts = pStmt.executeBatch();
if (pStmt != null) {
pStmt.close();
}
if (con != null) {
con.close();
}
}
// Handle any errors that may have occurred.
catch (SQLException | ClassNotFoundException e) {
e.printStackTrace();
message=e.getMessage();
}
return message;
}
คุณไม่ควรต้องตรวจสอบประเภทการส่งคืนของคำสั่งที่เตรียมไว้ของวัตถุการเชื่อมต่อ โปรแกรมควบคุมพื้นฐานซึ่งขึ้นอยู่กับแพลตฟอร์มสามารถให้การดำเนินการตามคำสั่งที่เตรียมไว้ INTERFACE ซึ่งไม่เกี่ยวข้องกับผู้ใช้ คุณควรทำงานกับวิธีการสาธารณะที่มีให้โดยอินเทอร์เฟซเท่านั้นและไม่ต้องขุดเพิ่มเติม ในกรณีที่คุณไม่มีข้อผิดพลาดเพียงแค่ส่งคำสั่ง ur ไปยังประเภททั่วไป PreparedStatement pStm = con.prepareStatememt (execStoredProc) หากคุณจัดการกับโพรซีเดอร์ที่ฉันถือว่าจาก execStoredProc ของคุณให้ใช้ con.prepareCall () และจัดเก็บในประเภท Callable Statement
นั่นเป็นเพราะคุณไม่ควรใช้ PreparedStatement ของคุณ แต่ใช้การแกะ con.prepareStatement (execStoredProc) .unwrap (SQLServerPreparedStatement.class);
Jana Duggar เปิดใจเกี่ยวกับการค้นหาความรักของเธอ นี่คือทุกสิ่งที่เธอพูดเกี่ยวกับหัวข้อและกรอบเวลา 5 ปีสำหรับการแต่งงาน
เมื่อเร็ว ๆ นี้ แซม ฮิวแฮน นักแสดงจากเรื่อง 'Outlander' ได้เปิดเผยสิ่งที่เขาจะทำจากกองถ่ายเพื่อระลึกถึงเจมี เฟรเซอร์ บทบาทที่ทำให้เขากลายเป็นดารา
'She Loves You' เขียนขึ้นในหนึ่งชั่วโมง บันทึกเสียงในหนึ่งวัน และเป็นเพลงของ The Beatles ที่มีการแสดงที่ดีที่สุดเพลงหนึ่งในอาชีพของพวกเขา
Dolly Parton และคุณย่า Bessie มีความสัมพันธ์พิเศษ คุณยายพาร์ตันป่วยหนัก แต่นั่นไม่ได้ทำให้ดอลลี่หยุดแกล้งเธอ
คุณอาจคิดว่าไม้โอ๊คหรือฮิคคอรีเป็นไม้ที่แข็ง แต่เมื่อต้องพูดถึงไม้ที่แข็งที่สุดในโลกแล้ว พวกมันกลับไม่ใกล้เคียงเลย
มหาสมุทรเต็มไปด้วยความงาม แต่ก็ซ่อนสิ่งมีชีวิตใต้ท้องทะเลที่น่ากลัวที่สุดบางชนิดไว้เช่นกัน สัตว์เหล่านี้หลายชนิดซ่อนตัวอยู่ใต้ผิวน้ำอันมืดมิด ในโลกใต้ทะเลลึกอันแสนกดดันและมืดมิด
หากคุณกำลังต่อสู้กับศัตรูหรือกำลังเตรียมตัวสำหรับโหมด PvP การรู้ถึงการเสริมพลังดาบที่ดีที่สุดใน Minecraft จะช่วยให้คุณได้เปรียบอย่างมาก การเสริมพลังดาบจะช่วยให้คุณสร้างความเสียหายได้มากขึ้น เพิ่มจำนวนม็อบที่ดรอป และเพิ่มความทนทานของดาบ
เมื่อผู้คนพูดถึงประเทศสังคมนิยม พวกเขามักจะนึกถึงการควบคุมโดยรัฐบาลอย่างเต็มรูปแบบโดยไม่มีกรรมสิทธิ์ส่วนบุคคล แต่ในทางปฏิบัติ เศรษฐกิจแบบสังคมนิยมมีความหลากหลายอย่างมาก
“เด็ก” โผล่รับเชิญดาราดังพร้อมข่าวร้าย
RAV4 นี้อ้างว่าอยู่ในสภาพที่ดีเยี่ยมและมีไว้สำหรับการเล่นเก้าอี้ดนตรี
ภาพจากโดรนจับภาพนักดับเพลิงที่กำลังพยายามดับไฟ
Eyes of Wakanda เชื่อมโยงโดยตรงกับ MCU พร้อมอัปเดตเกี่ยวกับ X-Men '97, What If..., Daredevil และอีกมากมาย
Ava Gardner แต่งงานกับ Mickey Rooney และ Frank Sintra และเธอยังคบหาดูใจกับดาราฮอลลีวูดอีกหลายคน ต่อไปนี้คือประวัติการออกเดทของ Ava Gardner
จอห์น คลีส แต่งงานกับเจนนิเฟอร์ เวด ภรรยาของเขาในปี 2012 นี่คือทุกสิ่งที่คุณต้องรู้เกี่ยวกับเจนนิเฟอร์ เวด ภรรยาของจอห์น คลีส
Michael C. Hall แต่งงานกับ Morgan Macgregor ภรรยาของเขาตั้งแต่ปี 2016 นี่คือทุกสิ่งที่คุณต้องการทราบเกี่ยวกับภรรยาของ Michael C. Hall
Mena Suvari แต่งงานกับ Michael Hope สามีของเธอมาตั้งแต่ปี 2018 นี่คือทุกสิ่งที่ควรรู้เกี่ยวกับสามีของ Mena Suvari
มันทำให้ฉันประหลาดใจ ทันใดนั้นมันก็เกิดขึ้นบ่อยๆ มันอยู่กลางทางอีกครั้ง <ไม่ ไม่ใช่คนในมหาสมุทรแปซิฟิก คุณเป็นสีน้ำตาลแดง คนที่งานคาร์นิวัล> ทุกพาดหัวข่าวดัง…..
ในปี 2022 ด้วยการเปิดตัว GPT-3 ทักษะการเขียนดูเหมือนจะมีความสำคัญน้อยลง ด้วย AI คนที่เขียนไม่ดีก็สามารถสร้างพนักงานที่มีคุณภาพได้เช่นกัน
ในโลกที่เปลี่ยนแปลงอย่างรวดเร็วและการแข่งขันในปัจจุบัน อาชีพของคนๆ หนึ่งมีบทบาทสำคัญในการเติบโตส่วนบุคคล ความมั่นคงทางการเงิน และความพึงพอใจในชีวิตโดยรวม อย่างไรก็ตาม ผู้คนจำนวนมากพบว่าตัวเองติดอยู่ในวงจรของความเมื่อยล้าและความไม่พอใจอย่างไม่หยุดยั้ง ค่อยๆ สูญเสียชีวิตการทำงานไป
เมื่อสัปดาห์ที่แล้วฉันสังเกตเห็นข่าวประชาสัมพันธ์ที่เผยแพร่ผ่าน PressGazette (เว็บไซต์ข่าวของสื่ออังกฤษ) บทความประกาศว่า Acast ซึ่งเป็นบริษัทโฮสติ้งและโฆษณาพอดคาสต์ของ Scandi จะเป็นผู้นำกลุ่มผู้เผยแพร่ "อาจมีอิทธิพลมากที่สุด" ในพอดคาสต์