将 Maximo 数据插入另一个数据库服务器

Insert Maximo data into another database server

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

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()

没有错误,但没有插入数据。 select 的查询工作正常,它可以 return 值,但插入/更新不起作用。 我在执行 insert/update 查询时错过了什么吗?

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

此外,您应该使用插入或更新语句文本调用 executeUpdate(),而不是调用 executeQuery()java.sql.Statement.executeUpdate()JavaDocs 说,“执行给定的 SQL 语句,它可以是 INSERT、UPDATE 或 DELETE 语句或 SQL 语句 returns什么都没有,例如 SQL DDL 语句。"