如题  !!   我现在在做一个在线选课系统,十分着急!!
   我现在有几个表   分别带有主键和外键的。我在课程信息表里插入新课程和删除某一课程,
  我的表结果是这样的:     课程信息表: cno是主键 ,tno是外键
   CREATE TABLE "WWJ"."COURSE_INFO" 
   ( "CNO" VARCHAR2(10) NOT NULL ENABLE, 
"CNAME" NVARCHAR2(10) NOT NULL ENABLE, 
"CINTRO" NVARCHAR2(200) NOT NULL ENABLE, 
"CHOUR" NVARCHAR2(10) NOT NULL ENABLE, 
"CREDIT" NVARCHAR2(4) NOT NULL ENABLE, 
"PATTERN" NVARCHAR2(10) NOT NULL ENABLE, 
"TNO" VARCHAR2(10), 
"CTIME" NVARCHAR2(30), 
"CLIMITNUM" NVARCHAR2(10), 
"CLIMITGRADE" NVARCHAR2(4), 
"CADDRESS" NVARCHAR2(30), )
           带有名字的主键和外键
 CONSTRAINT "C_PK" PRIMARY KEY ("CNO")
    CONSTRAINT "T_FP" FOREIGN KEY ("TNO")
   教师信息表:CREATE TABLE "WWJ"."COURSE_INFO" 
   ( "CNO" VARCHAR2(10) NOT NULL ENABLE, 
"CNAME" NVARCHAR2(10) NOT NULL ENABLE, 
"CINTRO" NVARCHAR2(200) NOT NULL ENABLE, 
"CHOUR" NVARCHAR2(10) NOT NULL ENABLE, 
"CREDIT" NVARCHAR2(4) NOT NULL ENABLE, 
"PATTERN" NVARCHAR2(10) NOT NULL ENABLE, 
"TNO" VARCHAR2(10), 
"CTIME" NVARCHAR2(30), 
"CLIMITNUM" NVARCHAR2(10), 
"CLIMITGRADE" NVARCHAR2(4), 
"CADDRESS" NVARCHAR2(30), )    带有名字的主键T_PK (tno)现在要在课程信息表里添加新的课程怎么加啊  我是这样写的:insert into course_info (?,?,?,?) values(*,*,*)(为了方便简化了,反正就是插入语句  ,可是插入不成功  老是提示说有约束条件那我要是删除某一课程的数据怎么写啊   就是根据主键cno来删除!求高人帮忙啊  我25号之前的把代码调出来啊!!!PS:我想在数据库里更新数据   也是出问题  就是编码问题  我用的是jsp+servlet+oracle写的不知哪位高人会的,顺便指点迷津啊:我上网查了很多编码跟oracle连接的编码问题,我是这样写的:try {
//带问号的是传进来的参数是中文的   我检查过了,在连接数据库之前没有出现乱码 
pr = conn
.prepareStatement("update course_info set cname=?,chour=?,pattern=?," +
"climitgrade=?,climitnum=?,ctime=?,caddress=? where cno=?");
// pStmt.setString(1,new String(cname.getBytes(),"gb2312")); pr.setString(1, new String(cname.getBytes("ISO8859"),"utf-8"));
pr.setString(2, new String(chour.getBytes("ISO8859"),"utf-8"));
pr.setString(3, new String(pattern.getBytes("ISO8859"),"utf-8"));
pr.setString(4, new String(climitgrade.getBytes("ISO8859"),"utf-8"));
pr.setString(5, new String(climitnum.getBytes("ISO8859"),"utf-8"));
pr.setString(6, new String(ctime.getBytes("ISO8859"),"utf-8"));
pr.setString(7, new String(caddress.getBytes("ISO8859"),"utf-8"));
pr.setString(8, new String(cno.getBytes("ISO8859"),"utf-8") );

flag = pr.executeUpdate();这样写不多吗?

解决方案 »

  1.   

    你对外键的原理还没搞清楚:
    因为你的课程表COURSE_INFO里的TNO是外键,所以你插入到课程表中的教师编号必须在教师表中存在。
    所以,应该先在教师表中插入相应编号的记录,然后才能在课程表中插入该教师的课程。SQL> create table teacher(tno varchar2(20) ,tname varchar2(20),constraint pk_tno primary key(tno));表已创建。SQL> create table course(cno varchar2(20),cname varchar2(20), tno varchar2(20),constraint fk_tno 
      2    foreign key (tno) references teacher(tno));表已创建。SQL>--向课程表先插入记录,教师T01现在还不存在
    SQL> insert into course(cno,cname,tno) values('C01','高等数学','T01');  
    insert into course(cno,cname,tno) values('C01','高等数学','T01')
    *
    第 1 行出现错误:
    ORA-02291: 违反完整约束条件 (C.FK_TNO) - 未找到父项关键字
    SQL> insert into teacher(tno,tname) values('T01','张三');已创建 1 行。SQL> insert into course(cno,cname,tno) values('C01','高等数学','T01');已创建 1 行。SQL> 
      

  2.   

    我知道了  谢谢  那关于编码问题呢
      就是我想更新课程信息表里的数据 但是老是出现:can bind a LONG value only for insert into a LONG colum
      

  3.   

    要是想要删除课程号cno='000001' 的数据呢   这个课程号是存在的
      

  4.   


    --RA-01461:can bind a LONG value only for insert into a LONG colum
    --"CINTRO" NVARCHAR2(200) NOT NULL ENABLE,将你的课程信息存放的值该大点
    alter table COURSE_INFO modify cintro varchar2(1000) not null--要是想要删除课程号cno='000001' 的数据呢 这个课程号是存在的
    删除失败呗!
      

  5.   

    我按你说的把 cintro改为 1000了   ,可还是出现 ORA-01461: can bind a LONG value only for insert into a LONG column
    这个问题  
      

  6.   


    还有我的意思是要删除cno='000001' 的数据   ,怎么写sql语句才能正确删除啊
      

  7.   

    这个ORA-01461: can bind a LONG value only for insert into a LONG column
    大多是由项目编码和数据库编码不一致造成的
    看你的程序代码,你使用的是utf-8编码,你知道你是oracle数据是什么编码吗?
    很有可能是编码不同造成的.
      

  8.   

    先把约束 disable 下 再操作吧。