oracle插入数据错误

zr_dixuexiongying 2008-02-24 11:07:46
我测试一个简单的oracle插入数据问题,怎么总是在抱ORA-00947的错误啊!

notice.sql脚本
create table notice
(
id int,
title varchar2(20),
content varchar2(20)
)

测试程序如下:

OracleTestConnect.java

package demo;

import java.sql.ResultSet;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.DriverManager;
import demo.Notice;


public class OracleTestConnect
{
public static void main(String[] args)
{
Connection conn = null;
Statement st = null;
ResultSet rs = null;
String title = null;
String content = null;
String strSql = null;
int id;

try
{
//以下是连接数据库的操作
String drivername = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:ORAC";
String name = "scott";
String password = "tiger";

//加载驱动
Class.forName(drivername).newInstance();

//连接
conn = DriverManager.getConnection(url,name,password);

System.out.println("数据库连接成功!!!");

//以下是插入数据的操作
try
{
title = "标题";
content = "内容";
id = 1;

strSql =
"insert into notice(id,title,content) values('"+id+","+title+","+content+"')";
st = conn.createStatement();
st.executeUpdate(strSql);
System.out.println("插入成功:"+strSql);
}
catch(Exception e)
{
e.printStackTrace();
}

}
catch(Exception ex)
{
ex.printStackTrace();
}
}

}

抱错信息如下:

java.sql.SQLException: ORA-00947: 没有足够的值

at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:180)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:208)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:543)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1451)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:862)
at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:1846)
at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:1771)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2361)
at oracle.jdbc.driver.OracleStatement.executeUpdate(OracleStatement.java:865)
at demo.OracleTestConnect.main(OracleTestConnect.java:48)
数据库连接成功!!!

总说我没有插入足够的值,可是我的表里面只有这三个字段啊!所以我就不明白了,望各位大虾指点
还有就是怎么样让id列在程序里面自动增长,意思就是说:比如mysql,sqlserver数据库里面都可以在表的字段后面加一个自动增长的标识,而oracle数据库却是要创建序列才能够自动增长,可是我怎么样才能够在程序里面绑定序列让这个字段自动增长呢?
...全文
273 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yibunengjing 2008-02-25
  • 打赏
  • 举报
回复
那就要用到oracle的
下面是建立一个sequence的语句,要在oracle内执行:
create sequence NOTICE_SEQ
minvalue 1
maxvalue 999999999999999999999999999
start with 16736
increment by 1
nocache;
然后sql语句这样写:
strSql = "insert into notice(id,title,content) values( NOTICE_SEQ.Nextval, ' " + title + " ', ' " + content + " ') ";
zr_dixuexiongying 2008-02-25
  • 打赏
  • 举报
回复
我知道了!也谢谢大家了,可是怎么在程序里面绑定序列了,让某一字段值,如id 实现自动增长

还有就是怎么样让id列在程序里面自动增长,意思就是说:比如mysql,sqlserver数据库里面都可以在表的字段后面加一个自动增长的标识,而oracle数据库却是要创建序列才能够自动增长,可是我怎么样才能够在程序里面绑定序列让这个字段自动增长呢?
yibunengjing 2008-02-25
  • 打赏
  • 举报
回复
是strSql = "insert into notice(id,title,content) values('"+id+","+title+","+content+"')";

以上这句出的问题,数据库里是字符类型的字段,必须加上单引号'
正确的语句如下:
strSql = "insert into notice(id,title,content) values('" + id + "','" + title + "','" + content + "')";
kokobox 2008-02-25
  • 打赏
  • 举报
回复
sql不对

顶1楼

yami251139 2008-02-25
  • 打赏
  • 举报
回复
你插入數據庫執行的時候報錯。。為什么報呢。。。
1樓說了。。。
jyf7356759 2008-02-25
  • 打赏
  • 举报
回复
1 lou zheng jie.. zhe zhong wen ti shi dou jing li guo lai de ..
lnfszl 2008-02-24
  • 打赏
  • 举报
回复
那个sql不对啊,应该是:
strSql = "insert into notice(id,title,content)
values('"+ id + "','" + title + "','" + content + "')";

少了四个单引号,你把id title content 三个值变成一个了,所以说没有足够的值啊
呵呵,要仔细哈

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧