【问题标题】:Insert Maximo data into another database server将 Maximo 数据插入另一个数据库服务器
【发布时间】:2021-12-28 06:54:05
【问题描述】:

我想将一些 maximo 数据插入到另一个数据库服务器的表中。我创建了一个这样的自动化脚本

from psdi.security import UserInfo
from psdi.server import MXServer
from psdi.util import MXApplicationException
from psdi.util import MXException
from java.rmi import RemoteException
from java.lang import System
from java.text import Format, DateFormat, SimpleDateFormat
from java.lang import System

mx = MXServer.getMXServer();
ui = mx.getSystemUserInfo();


url= "jdbc:sqlserver://MAXIMODEMO:1433; database=IntegrationTest; user=maxadmin; password=password; encrypt=false; trustServerCertificate=false; loginTimeout=30;";

from java.lang import Class
from java.sql import DriverManager,SQLException

#load driver and register
Class.forName(jdbc_driver).newInstance()
DriverManager.registerDriver(Class.forName(jdbc_driver).newInstance())

#get Connection
#connection = DriverManager.getConnection(jdbc_url, jdbc_user), jdbc_password)
connection = DriverManager.getConnection(url)

#find if item exist
sql = "Select itemnum from item where itemnum='"+mbo.getString("ITEMNUM")+"'"
result = connection.createStatement().executeQuery(sql)

sqlinsert = ""

sdf = SimpleDateFormat("yyyy-MM--dd");

if(result.next()) :
    sqlinsert = "Update Item set description='"+mbo.getString("DESCRIPTION")+"', orderunit='"+mbo.getString("ORDERUNIT")+"', status='"+mbo.getString("STATUS")+"' where ItemNum='"+mbo.getString("ITEMNUM")+"'"
else:
    sqlInsert="Insert into item(itemnum, description, orderunit, statusdate, status, groupname) values('" + mbo.getString("ITEMNUM")+ "','" + mbo.getString("Description") + "', '" + mbo.getString("ORDERUNIT") + "','" + sdf.format(mbo.getDate("STATUSDATE")) + "', '" + mbo.getString("STATUS") + "','" + mbo.getString("GROUPNAME") + "') "
result.close()

result = connection.createStatement().executeQuery(sqlinsert)

connection.close()

没有错误但没有插入数据。选择查询工作正常,它可以返回值,但插入/更新不起作用。 我在执行插入/更新查询时是否遗漏了什么?

【问题讨论】:

  • 您只需要导入您直接引用的类。因此,例如,您不需要from psdi.security import UserInfo,因为您从不直接实例化该类——即通过调用UserInfo("SOMEUSERID")

标签: maximo


【解决方案1】:

您在connection.close() 之前缺少connection.commit()

此外,您应该使用您的插入或更新语句文本调用executeUpdate(),而不是使用它调用executeQuery()JavaDocs for java.sql.Statement.executeUpdate() 说,“执行给定的 SQL 语句,可能是 INSERT、UPDATE 或 DELETE 语句或不返回任何内容的 SQL 语句,例如 SQL DDL 语句。”

【讨论】:

  • 感谢您的信息。是的,我在那部分错了。它应该是 executeUpdate 而不是使用 executeQuery。
猜你喜欢
  • 1970-01-01
  • 2021-07-17
  • 2018-09-14
  • 2016-07-19
  • 1970-01-01
  • 1970-01-01
  • 2011-03-18
  • 2023-04-10
  • 1970-01-01
相关资源
最近更新 更多