Java 我无法将记录插入在oracle数据库中创建的表中。我犯了什么错误?

Java 我无法将记录插入在oracle数据库中创建的表中。我犯了什么错误?,java,sql,oracle,jdbc,Java,Sql,Oracle,Jdbc,我已经创建了如下表格: import java.sql.*; import sun.jdbc.odbc.JdbcOdbcDriver; class Jdbc1 { public static void main(String[] args) throws Exception { JdbcOdbcDriver jd=new JdbcOdbcDriver(); DriverManager.registerDriver(jd);

我已经创建了如下表格:

    import java.sql.*;
import sun.jdbc.odbc.JdbcOdbcDriver;
class Jdbc1
{
    public static void main(String[] args) throws Exception
    {
        JdbcOdbcDriver jd=new JdbcOdbcDriver();
        DriverManager.registerDriver(jd);
        Connection con=DriverManager.getConnection("jdbc:odbc:sai123","SYSTEM","sai123");
        Statement st=con.createStatement();
        int res=st.executeUpdate("insert into A1 values('1','tomato','10')");
        System.out.println(res+"record is inserted..");
        st.close();
        con.close();
    }
}
当我编译并运行java程序时,它会显示“插入1条记录…”,但当我在SQLdeveloper中打开我的表时,我在表中找不到任何更新。它们都是空的! 我还为ojdbc-6.jar设置了类路径。我在这里犯了什么错误?是否还有其他文件需要复制和粘贴?我只是一个初学者,请帮忙。
我在Editplus中的程序如何将更新直接导入SQL中创建的表中。它遵循什么路径?

Oracle默认情况下将自动提交设置为false。从Oracle Sql Developer(或代码)将自动提交设置为true,或从代码提交更改:

CREATE TABLE A1(
INO INTEGER NOT NULL,
INAME CHAR(30) NOT NULL,
IPRICE INTEGER NOT NULL
);
或者,如果要设置为自动提交:

//before con.close()
con.commit();

默认情况下,Oracle已将自动提交设置为false。从Oracle Sql Developer(或代码)将自动提交设置为true,或从代码提交更改:

CREATE TABLE A1(
INO INTEGER NOT NULL,
INAME CHAR(30) NOT NULL,
IPRICE INTEGER NOT NULL
);
或者,如果要设置为自动提交:

//before con.close()
con.commit();

尝试通过调用提交记录
conn.commit()

另请参阅

main的最终代码应该如下所示

公共静态void main(字符串[]args)引发异常
{
JdbcOdbcDriver jd=新的JdbcOdbcDriver();
DriverManager.registerDriver(jd);
Connection con=DriverManager.getConnection(“jdbc:odbc:sai123”,“SYSTEM”,“sai123”);
语句st=con.createStatement();
int res=st.executeUpdate(“插入A1值('1','tomato','10')”);
System.out.println(res+“记录已插入…”;
con.commit();
圣克鲁斯();
con.close();
}

尝试通过调用
conn.commit()

另请参阅

main的最终代码应该如下所示

公共静态void main(字符串[]args)引发异常
{
JdbcOdbcDriver jd=新的JdbcOdbcDriver();
DriverManager.registerDriver(jd);
Connection con=DriverManager.getConnection(“jdbc:odbc:sai123”,“SYSTEM”,“sai123”);
语句st=con.createStatement();
int res=st.executeUpdate(“插入A1值('1','tomato','10')”);
System.out.println(res+“记录已插入…”;
con.commit();
圣克鲁斯();
con.close();
}

您的Java代码和SQLDeveloper是否可能引用了不同的模式?我建议做以下几点

  • 使INO成为表的主键
  • Put
    con.commit()介于
    
    int res=st.executeUpdate(“插入A1值('1','tomato','10')
    System.out.println(res+“插入记录…”)
  • 多次运行该程序以检查是否出现主键冲突异常。这将告诉您,您的程序是否正在插入到您没有查看的表中

  • 您的Java代码和SQLDeveloper是否可能引用了不同的模式?我建议做以下几点

  • 使INO成为表的主键
  • Put
    con.commit()介于
    
    int res=st.executeUpdate(“插入A1值('1','tomato','10')
    System.out.println(res+“插入记录…”)
  • 多次运行该程序以检查是否出现主键冲突异常。这将告诉您,您的程序是否正在插入到您没有查看的表中


  • 请不要在
    SYS
    SYSTEM
    帐户中创建表…但这就是我可以连接到oracle数据库的方式,不是吗?不要在INSERT语句中的整数周围加单引号。你可以,但你应该只做
    SYSTEM
    的管理工作(请参阅),尤其不要在那里创建表。很难去掉您为测试表请求的空间。你需要如何创建用户的说明吗?是的,那肯定会有帮助。请告诉我怎么做!请不要在
    SYS
    SYSTEM
    帐户中创建表…但这就是我可以连接到oracle数据库的方式,不是吗?不要在INSERT语句中的整数周围加单引号。你可以,但你应该只做
    SYSTEM
    的管理工作(请参阅),尤其不要在那里创建表。很难去掉您为测试表请求的空间。你需要如何创建用户的说明吗?是的,那肯定会有帮助。请告诉我怎么做!我补充说..还是一样。第二种方法是在
    executeUpdate()之后提交事务。这是通过<代码> CON.Actudio()/代码> @赛克里希纳,如果它工作,请考虑接受答案,你和M3TH0DMAN将获得信誉点:-从DabaTABLE中选择什么?TabLEYNAME=“A1”在SQLDeveloper说什么?所以在数据库中有许多不同的表,名为“A1”。也许你可以像@Sourav建议的那样,插入其中一个,然后再看另一个。看看用户“SYSTEM”,它是表“A1”,这是您在Java示例中使用的一个…我添加了它…它仍然是一样的。第二种方法是在
    executeUpdate()之后提交事务。
    。这是通过<代码> CON.Actudio()/代码> @赛克里希纳,如果它工作,请考虑接受答案,你和M3TH0DMAN将获得信誉点:-从DabaTABLE中选择什么?TabLEYNAME=“A1”在SQLDeveloper说什么?所以在数据库中有许多不同的表,名为“A1”。也许你可以像@Sourav建议的那样,插入其中一个,然后再看另一个。看看用户“SYSTEM”,它是表“A1”,这是您在Java示例中使用的表……以及我在Editplus中的程序如何将更新直接导入SQL中创建的表中。它遵循什么路径?我在Editplus中的程序如何将更新直接导入SQL中创建的表中。它遵循的是什么路径?您确定要在正确的架构和服务器下检查正确的表吗?您确定要检查吗