gpt4 book ai didi

java - JDBC插入查询不在oracle数据库中插入记录

转载 作者:行者123 更新时间:2023-11-30 09:00:26 24 4
gpt4 key购买 nike

我已经成功建立了数据库连接,但是当我通过 Java 运行这段代码时,我的代码一直在运行,但没有任何反应。什么都不意味着它既没有插入数据库也没有给我任何异常(exception)。

我正在使用来自 Oracle 11g (MDSYS.SDO_POINT_TYPE) 的空间数据类型。我直接在 Oracle 11g 数据库中运行这个查询并且它工作正常,但是当我通过 java 代码使用它时不知何故不插入记录。

我还尝试了一个简单的学生表,并能够使用 java 插入语句。

这是我的代码片段:

String insert = "insert into table1 values('p0', MDSYS.SDO_POINT_TYPE(228,102, null))";
try
{
Statement statement = connection.createStatement();
statement.executeUpdate(insert);
System.out.println("Inserted record in the table");
}catch(SQLException e)
{
System.out.println("Error due to SQL Exception");
e.printStackTrace();
}
try
{

connection.close();
System.out.println("Closing the connection");
}catch(SQLException e)
{
System.out.println("Error in closing connection");
e.printStackTrace();
}

连接 JDBC 是:

try {
Class.forName("oracle.jdbc.driver.OracleDriver");

} catch (ClassNotFoundException e) {
System.out.println("Where is your Oracle JDBC Driver?");
e.printStackTrace();
}
System.out.println("Oracle JDBC Driver Registered!");

Connection connection = null;

try {

connection = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:db11g", username,
pass);


} catch (SQLException e) {
System.out.println("Connection Failed!");
e.printStackTrace();
}
if (connection != null) {
System.out.println("Database connected");
} else {
System.out.println("Failed to connect the database");
}
return connection;

最佳答案

除非你的连接处于自动提交模式* 你应该调用commit()在调用 close() 之前:

It is strongly recommended that an application explicitly commits or rolls back an active transaction prior to calling the close method. If the close method is called and there is an active transaction, the results are implementation-defined.

看起来Oracle的行为是回滚事务。以下是解决此问题的方法:

try
{
Statement statement = connection.createStatement();
statement.executeUpdate(insert);
connection.commit(); // <====== Here
System.out.println("Inserted record in the table");
}catch(SQLException e)
{
System.out.println("Error due to SQL Exception");
e.printStackTrace();
}

此外,最好在 INSERT 语句中列出要插入的列:

String insert = "insert into table1 (col1, col2) values('p0', MDSYS.SDO_POINT_TYPE(228,102, null))";

col1col2 替换为实际列的名称。还要考虑参数化您的插入,并使用 PreparedStatement


* 很少推荐。

关于java - JDBC插入查询不在oracle数据库中插入记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26808965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com