Welcome 微信登录

首页 / 数据库 / MySQL / Oracle中提取主键拼字符串的问题

最近在做一个数据库是用的Oracle的项目,也是我的第一个项目模块,感觉很蛋疼,但是有很多收获。下面就是我遇到的问题和解决方法,我是菜鸟级,希望高手如果发现错误,请指出。比如:创建的Oracle的表,主键描述:“四位树形代码”比如用户表中:表名:USER表记录:USER_ID CHAR(15) NOT NULL,USER_NAME VARCHAR2(20) NOT NULL,USER_EMAIL VARCHAR2(30),PRIMARY KEY(USER_ID) 先插入一条数据:INSERT INTO USER VALUES("0001", "张三", "123456789@www.linuxidc.com"); 现在我要查询:SELECT * FROM USER; 执行的结果:USER_ID                             USER_NAME                                  USER_EMAIL   0001                                          张三                                       123456789@www.linuxidc.com 如果我们从Oracle中只查询出USER_IDSELECT USER_ID FROM USER; 执行的结果:USER_ID   0001 但是在我们拼字符串sql的时候,比如我们要联表查询,USER_ID在另外一个表中是一个内联的字段,我们就要在USER_ID内联的表中使用到。比如在“学生表”中:表名:STUDENT表记录:STUDENT_ID CHAR(15) NOT NULL,USER_ID CHAR(15) NOT NULL,STUDENT_NAME VARCHAR2(20) NOT NULL,PRIMARY KEY(STUDENT_ID) 插入一条记录:INSERT INTO STUDENT VALUES("0001","0001" , "学生张三");查询(这里的查询,我要信息中给学生分配邮箱信息)SELECT S.STUDENT_NAME, U.USER_MAILFROM STUDENT S, USER U WHERE S.USER_ID=U.USER_ID; 执行结果:STUDENT_NAME                                               USERMAIL     学生张三                                                 123456789@163..com重点:在数据库中,直接这样用肯定是对的,如果我们在java文件中使用字符串sql进行拼字符串就会出现问题了。使用JDBC连接,执行SQL,返回查询结果,这里省略JDBC的处理假设使用public List<StudentPOJO> baseListSql(String sql); 方法处理。拼sql的方法:(1)//这一句中user_name是传入的参数,根据传入的user的名字找到user_id的值String usr_id = this.baseListSql("SELECT USER_ID FROM USER WHERE USER_NAME=""+user_name+"" ");    //根据user_id关联USER表中的USER_MAILString sql = "SELECT S.STUDENT_NAME, U.USER_MAIL FROM STUDENT S, USER U WHERE S.USER_ID=""+user_id+""";//通过JDBC执行后返回ListList<StudentPOJO> students = this.baseListSql(sql); //返回数据return  students;分析:直接看的时候,还认为这样的sql逻辑是对的,字符串也拼对了的,但是是不能执行成功的,当然你可以使用System.out.println(sql);和Debug的模式进行调试,但是我这里记下,不想每次都因为这个错误去调试半天。这里USER_ID是CHAR类型,长度是15 , 我们使用“四位树形代码”输入的数据是"0001"这样当他查出来是"0001           ",后面全部都是空格,所以在下面拼的sql中传入的值就不正确了,所以需要一定的处理,处理如方案(2)(2)//这一句中user_name是传入的参数,根据传入的user的名字找到user_id的值String usr_id = this.baseListSql("SELECT USER_ID FROM USER WHERE USER_NAME=""+user_name+"" ");   //首先使用String的trim()方法去除所有空格,这样就正确了user_id = user_id.trim();  //根据user_id关联USER表中的USER_MAILString sql = "SELECT S.STUDENT_NAME, U.USER_MAIL FROM STUDENT S, USER U WHERE S.USER_ID=""+user_id+""";//通过JDBC执行后返回ListList<StudentPOJO> students = this.baseListSql(sql); //返回数据return  students;举例中可能会有错误,希望发现错误指出一下。
这样就可以执行成功了!找的时候没注意,幸苦死了,记录一下pass一下它!下次有时间继续记录遇到的问题,哈哈!奖励一下自己!遇到得多解决得多,到时候一定要成为高手。Oracle数据库实现自动加1Oracle数据运用那种主键生成策略相关资讯      Oracle基础教程 
  • Oracle块编程返回结果集详解  (11/10/2013 10:45:58)
  • Oracle基础教程之设置系统全局区  (08/22/2013 14:24:00)
  • Oracle基础教程知识点总结  (06/18/2013 07:43:32)
  • Oracle基础教程之tkprof程序详解  (10/22/2013 11:49:50)
  • Oracle基础教程之sqlplus汉字乱码  (07/18/2013 16:30:00)
  • Oracle 管理之 Linux 网络基础  (02/16/2013 18:37:35)
本文评论 查看全部评论 (0)
表情: 姓名: 字数