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成为表的主键
Putcon.commit()代码>介于
int res=st.executeUpdate(“插入A1值('1','tomato','10')代码>
和
System.out.println(res+“插入记录…”)代码>
多次运行该程序以检查是否出现主键冲突异常。这将告诉您,您的程序是否正在插入到您没有查看的表中
您的Java代码和SQLDeveloper是否可能引用了不同的模式?我建议做以下几点
使INO成为表的主键
Putcon.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中创建的表中。它遵循的是什么路径?您确定要在正确的架构和服务器下检查正确的表吗?您确定要检查吗