JDBC解决SQL注入问题 急求!!!!

yuxingfirst 2010-04-16 11:44:58
package hnie.oracle;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class SQLInject {

public static void main(String [] args) {
read("1011");
}

public static void read(String dno) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = OracleJDBCUtil.getConnetion();
String sql = "SELECT DNO,NAME,LOC FROM mytable WHERE DNO=?";

ps = conn.prepareStatement("SELECT DNO,NAME,LOC FROM mytable WHERE DNO=?");
ps.setString(1, dno);
System.out.println(sql);
rs = ps.executeQuery();
while(rs.next()) {
System.out.println(rs.getObject(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
OracleJDBCUtil.free(ps, rs, conn);
}
}
}


为什么没有输出呀,,,sql语句中的?在后面不是调用setString()设置了吗???怎么还是有问题呢???
...全文
879 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
humcomm 2010-04-20
  • 打赏
  • 举报
回复
有报错吗?把报错信息贴出来,大家帮你看看
fanyuna 2010-04-20
  • 打赏
  • 举报
回复
OracleJDBCUtil.getConnetion();这个就是获取连接.首先楼主确认下您是否连接上了数据库(别忘了把驱动包得放在lib下面)?如果连接上了,看看数据库中有没有数据?
技术方舟 2010-04-20
  • 打赏
  • 举报
回复
你的程序漏洞太多了,首先、获得一个新的对象你要判断它是否为空不为空再执行下一步,比如:con是否为空你知道吗???
qjtttt 2010-04-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 unhappyway 的回复:]
为什么你这里面没有加载驱动的语句呢?Class.forName()
还有是不是你数据库里的“DNO”字段不是String类型的呢?
我怀疑是esecuteUpdate()方法没有返回值
[/Quote]

不是哦,应该是数据库没有根据sql语句查询到内容
至于驱动的问题。。。说不定人家在spring里面做了加载呢
keephope 2010-04-18
  • 打赏
  • 举报
回复
还是详细说明一下吧
1 如果手动执行了SQL语句发现有结果,而运行的时候发现没有结果,看看是否查错了库。否则,运行SQL语句都没有结果的话,用JAVA访问也不可能有结果。同时也查查开关连接、数据库驱动方面有什么问题。有没有可能是你在开关连接的时候吧错误给屏蔽了。
2 养成良好的习惯比较好,否则更改SQL语句后会造成异常,而且我不建议使用getObject()方法,因为你传递进去的是字符串,那么获得值的时候完全可以用字符串来去,如果用了getObject(),我想会不会给你出一个内存地址打出来了呢

keephope 2010-04-18
  • 打赏
  • 举报
回复
建议
1 检查数据库内是否有符合要求的记录,可以自己手动执行下查询语句看看是否能查找到 结果
2 取值的时候使用字段的名称而非数字
aa1478963 2010-04-18
  • 打赏
  • 举报
回复
class.forName()
DriverMamager.getConnection()
都要写
FOREVER1314157 2010-04-18
  • 打赏
  • 举报
回复
驱动啊!!!
zjlhongjin 2010-04-17
  • 打赏
  • 举报
回复
如果没有报任何异常的话,
代表数据库中没有东西。。
WYhack 2010-04-17
  • 打赏
  • 举报
回复
ps.setString(1, dno);

这事什么意思?
xinleicn 2010-04-17
  • 打赏
  • 举报
回复
数据库里没有东西。。。。
编程学童 2010-04-17
  • 打赏
  • 举报
回复
为什么你这里面没有加载驱动的语句呢?Class.forName()
还有是不是你数据库里的“DNO”字段不是String类型的呢?
我怀疑是esecuteUpdate()方法没有返回值
lyj8808208 2010-04-17
  • 打赏
  • 举报
回复
debug下不就知道了嘛!
霏霏老爹 2010-04-17
  • 打赏
  • 举报
回复
class.forName()在哪呢?
uk445737547 2010-04-17
  • 打赏
  • 举报
回复
debug下看看执行到哪步?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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