我在linux服务器上运行不同的r程序。程序因数据库连接而失败,会出现以下错误: -
1:在odbcDriverConnect中(paste0(“DRIVER = {SQL Server}; server =”,服务器, :[RODBC] ERROR:状态08001,代码0,消息 [unixODBC] [FreeTDS] [SQL Server]无法连接到数据源
2:在odbcDriverConnect中(paste0(“DRIVER = {SQL Server}; server =”,服务器, :[RODBC] ERROR:状态01000,代码20002,消息 [unixODBC] [FreeTDS] [SQL Server] Adaptive Server连接失败
3:在odbcDriverConnect中(paste0(“DRIVER = {SQL Server}; server =”,服务器, :[RODBC] ERROR:状态01000,代码20017,消息 [unixODBC] [FreeTDS] [SQL Server]来自服务器的意外EOF
4:在odbcDriverConnect中(paste0(“DRIVER = {SQL Server}; server =”,服务器, :ODBC连接失败执行暂停
有时,程序运行完全没有任何错误。有时会失败。我无法确切地知道问题所在。
我测试了一段代码,看看它是如何表现的:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
String xmldoc="./src/com/ui/Data.xml";
try {
// background and layout should be set only once
jPanel7.setBackground(Color.WHITE);
jPanel7.setLayout(new FlowLayout());
File fXmlFile = new File(xmldoc);
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
NodeList nList = doc.getElementsByTagName("username");
for (int temp = 0; temp < nList.getLength(); temp++) {
Node nNode = nList.item(temp);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
String text = eElement.getTextContent();
System.out.println(text);
JLabel label2 = new JLabel(text); // create a new JLabel with the given text
// set label2's attributes
label2.setPreferredSize(new Dimension(100,40));
label2.setFont(new Font("Times New Roman", Font.BOLD, 24));
jPanel7.add(label2); // add it to jPanel7
}
}
} catch (Exception ex) {
System.out.println("Database exception : userExists()");
}
}
有时它会被完全执行。有时它介于两者之间失败(例如第45次连接数据库失败)
我从未在Windows环境中遇到过这个问题。
我想知道在这种情况下究竟是什么问题。它是与网络,驱动程序,我的连接字符串或数据库相关的东西。
这可能是解决这个问题的方法。
答案 0 :(得分:0)
我猜我的连接字符串和配置文件看起来不错。
可能有一个网络问题正在删除一个开放的RODBC
连接。
我尝试了这个解决方案: -
repeat
{
dbhandle <- odbcDriverConnect(paste0("DRIVER={SQL Server}; server=",server,"; database=",dbname,"; uid=",usernm,"; pwd=",passwd, "; TDS_Version=8.0; Port=1433;", sep=""))
if(class(dbhandle) == "RODBC"){
break
}
}
有了这个,我不会继续进行,直到dbhandle
成为班级RODBC
。
通过在我的程序中将此代码集成到需要数据库连接的任何地方,我能够运行程序而不会收到这些错误消息。