我正在尝试使用worklight 6.1.0连接到本地LAN中的DB2,然后触发Select Query以查找数据(如果存在)。但我得到以下错误:
{
"errors": [
"Runtime: DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=DATABASE_NAME.REGISTRATION, DRIVER=3.58.82.\nPerformed query:\nSELECT * FROM DATABASE_NAME.registration where DATABASE_NAME.registration.Mob_No = ?"
],
"info": [
],
"isSuccessful": false,
"warnings": [
]
}
我的SQL适配器配置如下所示:
<connectionPolicy xsi:type="sql:SQLConnectionPolicy">
<!-- Example for using a JNDI data source, replace with actual data source name -->
<!-- <dataSourceJNDIName>java:/data-source-jndi-name</dataSourceJNDIName> -->
<!-- Example for using MySQL connector, do not forget to put the MySQL connector library in the project's lib folder -->
<dataSourceDefinition>
<driverClass>com.ibm.db2.jcc.DB2Driver</driverClass>
<url>jdbc:db2://172.21.11.129:50000/MOBILEDB</url>
<user>db2admin</user>
<password>Newuser123</password>
</dataSourceDefinition>
</connectionPolicy>
具有程序的js文件如下:
var selectStatement1 = "SELECT * FROM DATABASE_NAME.registration where DATABASE_NAME.registration.Mob_No = ?";
var procStmt1 = WL.Server.createSQLStatement(selectStatement1);
function registrationLookup(mobile){
WL.Logger.debug("Inside registrationLookup");
return WL.Server.invokeSQLStatement(
{
preparedStatement : procStmt1,
parameters : [mobile]
}
);
}
我做了一些关于将DB2与Worklight连接起来的研究,并且知道我需要将下面的数据放在worklight.properties文件中。
wl.db.username=db2admin
wl.db.type=DB2
wl.db.password=Newuser123
wl.db.driver=com.ibm.db2.jcc.DB2Driver
但是在添加它之后,我无法部署适配器并且错误说“db2admin&#39;不存在。所以我在当前问题的背景下跳过了这一步。但是在经历了我没有添加这个worklight.properties数据的错误之后,在我看来,对象并不存在&#39;根据 http://www-01.ibm.com/support/docview.wss?uid=swg21613531 或用户表不存在。任何建议都会有所帮助。 注意:
答案 0 :(得分:1)
错误消息是您的SQL语句无效,因此我推断您与DB的连接正常。
要诊断它,首先使用DB2命令行或其他工具运行SQL。我的猜测是你的意思
LARSEN.registration
而您正在说DATABASE_NAME.registration
答案 1 :(得分:0)
得到自己的问题及其真正有趣的问题。感谢https://stackoverflow.com/users/2260967/glen-misquith [Glen Misquith]
问题出在SQL查询框架上,这与我用MYSQL做的不同。
适配器的Java脚本文件:
var selectStatement4 = "UPDATE \"LARSEN\".\"registration\" SET \"LARSEN\".\"registration\".\"Pass\"=?, \"LARSEN\".\"registration\".\"Re_Pass\"=? WHERE \"User_Name\" = ?";
var procStmt5 = WL.Server.createSQLStatement(selectStatement4);
function updatePassword(username,pass,repass){
WL.Logger.debug("Inside updatePassword "+username+" "+pass+" "+repass);
return WL.Server.invokeSQLStatement(
{
preparedStatement : procStmt5,
parameters : [pass,repass,username]
}
);
}
这是一个奇怪的事情在准备它时需要在SQL语句中使用斜杠。 我真的想了解DB2的这种行为。而且我也不能直接写'从架构名列表中选择* '并精确写出需要获取数据的列名。