orcale一个很简单的问题,总是错误,求解!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了orcale一个很简单的问题,总是错误,求解!相关的知识,希望对你有一定的参考价值。

我以前没有用过oracle,只用了sqlserver,mysql ,刚接触oracle 有点不习惯。
try

Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:ORCL", "root", "root");
String sql = "insert into stu(id,name,intrest) values(seq.nextval,?,?)";
PreparedStatement pst = conn.prepareStatement(sql);
pst.setString(1, "11");
pst.setString(2, "123");
pst.executeUpdate();

catch (Exception e)
e.printStackTrace();
finally
try
if (conn != null)
conn.close();
catch (SQLException e)
e.printStackTrace();


报错:ORA-00904: "INTREST": 标识符无效

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:213)
at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:952)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1160)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3285)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3368)
at demo1.inserted(demo1.java:25)
at demo1.main(demo1.java:11)

上述代码,仅供测试!!不是很规范,但是语法是没有错误的!很奇怪我用sys这个用户登录,操作。它又报这个错:
ORA-28009: connection as SYS should be as SYSDBA or SYSOPER

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:283)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:278)

INTREST???
你有地方 insert 写错了吗?或者你用到了INTREST字段?但该字段名称错误?
看看你的demo1.java:25行。。。
参考技术A String sql = "insert into stu(id,name,intrest) values(seq.nextval,?,?)";
id 是seq.nextval是自己增的,你不用添它!
String sql = "insert into stu(name,intrest) values(?,?)";追问

在网上查了 很多说是 字段大小写的问题,我也不知道怎么回事

追答

这个你试试看我的方法还出不出错了!如果是字段的问题的话,你把字段改大点就好了啊。

用 scipy 的 solve_bvp 求解 BVP

【中文标题】用 scipy 的 solve_bvp 求解 BVP【英文标题】:Solving a BVP with scipy's solve_bvp 【发布时间】:2017-12-05 15:16:20 【问题描述】:

我有一个具有 3 个边界条件的 3 个微分方程系统(我相信从代码中会很明显)。我设法在 MATLAB 中通过一个循环来解决它,以便在不终止程序的情况下一点一点地更改初始猜测,如果它即将返回错误。然而,在scipysolve_bvp 上,我总是得到一些 的答案,尽管这是错误的。所以我不断地改变我的猜测(不断地改变答案),并且给出了与我从实际解决方案中得到的非常接近的数字,但它仍然无法正常工作。代码是否还有其他问题,因为它不起作用?我刚刚编辑了他们文档的代码。

import numpy as np
def fun(x, y):
    return np.vstack((3.769911184e12*np.exp(-19846/y[1])*(1-y[0]), 0.2056315191*(y[2]-y[1])+6.511664773e14*np.exp(-19846/y[1])*(1-y[0]), 1.696460033*(y[2]-y[1])))
def bc(ya, yb):
    return np.array([ya[0], ya[1]-673, yb[2]-200])
x = np.linspace(0, 1, 5)
#y = np.ones((3, x.size))
y = np.array([[1, 1, 1, 1, 1], [670, 670, 670, 670, 670], [670, 670, 670, 670, 670] ])
from scipy.integrate import solve_bvp
sol = solve_bvp(fun, bc, x, y)

实际解决方案如下图所示。

BVP 的 MATLAB 解决方案

【问题讨论】:

【参考方案1】:

显然你需要一个更好的初始猜测,否则solve_bvp 使用的迭代方法可以在y[1] 中创建值,使表达式exp(-19846/y[1]) 溢出。当这种情况发生时,算法很可能会失败。该表达式中的溢出意味着y[1] 中的某些值是负数;即求解器在杂草中太远了,它几乎没有机会收敛到正确的解决方案。您会看到警告,有时该函数仍会返回合理的解决方案,但通常会在发生溢出时返回垃圾。

您可以通过检查sol.status 来确定@​​987654327@ 是否收敛失败。如果不为 0,则表示失败。 sol.message 包含描述状态的文本消息。

通过使用它来创建初始猜测,我能够获得 Matlab 解决方案:

n = 25
x = np.linspace(0, 1, n)
y = np.array([x, np.full_like(x, 673), np.linspace(800, 200, n)])

较小的n 值也可以,但是当n 太小时,会出现溢出警告。

这是我修改后的脚本,后面是它生成的情节:

import numpy as np
from scipy.integrate import solve_bvp
import matplotlib.pyplot as plt


def fun(x, y):
    t1 = np.exp(-19846/y[1])*(1 - y[0])
    dy21 = y[2] - y[1]
    return np.vstack((3.769911184e12*t1,
                      0.2056315191*dy21 + 6.511664773e14*t1,
                      1.696460033*dy21))

def bc(ya, yb):
    return np.array([ya[0], ya[1] - 673, yb[2] - 200])


n = 25
x = np.linspace(0, 1, n)
y = np.array([x, np.full_like(x, 673), np.linspace(800, 200, n)])

sol = solve_bvp(fun, bc, x, y)

if sol.status != 0:
    print("WARNING: sol.status is %d" % sol.status)
print(sol.message)

plt.subplot(2, 1, 1)
plt.plot(sol.x, sol.y[0], color='#801010', label='$y_0(x)$')
plt.grid(alpha=0.5)
plt.legend(framealpha=1, shadow=True)
plt.subplot(2, 1, 2)
plt.plot(sol.x, sol.y[1], '-', color='C0', label='$y_1(x)$')
plt.plot(sol.x, sol.y[2], '--', color='C0', label='$y_2(x)$')
plt.xlabel('$x$')
plt.grid(alpha=0.5)
plt.legend(framealpha=1, shadow=True)
plt.show()

【讨论】:

有没有办法知道这是否是真正的答案?就像在 MATLAB 中一样,如果我的起始猜测错误,我会得到一个错误,但这里一切都给了我 some 答案。所以我现在才确定如何验证我的解决方案在 Python 中是对还是错。我假设没有诸如溢出警告之类的错误消息意味着它有效。我刚刚尝试使用np.linspace(700, 400, n)]),它似乎也失败了。我想我需要在某种程度上包含变量的范围? "我刚用 np.linspace(700, 400, n)])" 试过了 不是必须的,当然也不能保证收敛,但是好像传递满足边界条件的初始猜测是个好主意。 谢谢。这是验证它的好方法。您使用 y[2] 初始猜测作为从 800 到 200 的 linspace 数组,而不是反过来,因为它就是这样,对吧?你为什么不为y[1] 做一个从600 到更高的linspace,而只使用full_like 代替? y[2] 更敏感吗?你以前是怎么知道的? “你使用 y[2] 初始猜测作为从 800 到 200 的 linspace 数组,而不是反过来,因为它是这样的,对吧?” 是的,并且边界条件是y[2] x=1 是 200。我没有使用 linspace 代替 y[1] 因为我不需要 - 一旦我使 y[0] 增加和 y[2] 减少,求解器可靠收敛。但是,我只是尝试将np.linspace(673, 800, n) 用于y[1],但它未能收敛!去搞清楚。较小的坡度有效,例如np.linspace(673, 700, n). 我明白了。那很有意思。我想在做这些问题时要记住保持低斜率。谢谢。

以上是关于orcale一个很简单的问题,总是错误,求解!的主要内容,如果未能解决你的问题,请参考以下文章

如何在 flyway.conf 中设置 orcale 钱包

ORCAL Merge into用法总结

用 scipy 的 solve_bvp 求解 BVP

Maven 打包的时候 总是出现这个错误,怎么破!大神们,求解啊,30分谢谢

具有回溯的数独求解器不能总是检测到多个解决方案

各位大佬我在vue+nuxt项目中用handsontable表格插件时,总是报navigator is not defined错误,求解?