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()设置了吗???怎么还是有问题呢???

解决方案 »

  1.   

    ps.setString(1, dno);这事什么意思?
      

  2.   

    为什么你这里面没有加载驱动的语句呢?Class.forName()
    还有是不是你数据库里的“DNO”字段不是String类型的呢?
    我怀疑是esecuteUpdate()方法没有返回值
      

  3.   


    不是哦,应该是数据库没有根据sql语句查询到内容
    至于驱动的问题说不定人家在spring里面做了加载呢
      

  4.   

    class.forName()
    DriverMamager.getConnection()
    都要写
      

  5.   

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

  6.   

    你的程序漏洞太多了,首先、获得一个新的对象你要判断它是否为空不为空再执行下一步,比如:con是否为空你知道吗???
      

  7.   

    OracleJDBCUtil.getConnetion();这个就是获取连接.首先楼主确认下您是否连接上了数据库(别忘了把驱动包得放在lib下面)?如果连接上了,看看数据库中有没有数据?