public void query(String desttermid){
System.out.println(desttermid);
Connection con = ConnectionManager.getConnection();
    CallableStatement stmt = null;
    ResultSet rs=null;
    try{
     stmt = con.prepareCall("{call p4(?,?,?)}");
     stmt.setString(1, desttermid);
            stmt.registerOutParameter(2, java.sql.Types.VARCHAR); //指定输出类型
            stmt.registerOutParameter(3, java.sql.Types.VARCHAR); //指定输出类型
            stmt.execute();
            String name=stmt.getString(2);
            String re=stmt.getString(3);
            System.out.println("name="+name+"\t"+"re="+re);
            
    }catch(SQLException e){
     e.printStackTrace();
    }finally{
     try{
     rs.close();
     stmt.close();
     con.close();
     }catch(SQLException e){
     e.printStackTrace();
     }
    }
    

}
public static void main (String args[]){
DemoTest d = new DemoTest();
String s="222";
d.query(s);
}
=========================CREATE DEFINER=`root`@`localhost` PROCEDURE `p4`(IN deid VARCHAR(20),OUT NAME VARCHAR(25),OUT pwd VARCHAR(25))
BEGIN
SELECT uname,upwd INTO NAME,pwd FROM fu_white_user WHERE dessid = deid LIMIT 1;
END=================

解决方案 »

  1.   

    贴出异常信息来!光说空指针异常,究竟是哪行代码异常??
    CREATE DEFINER=`root`@`localhost` PROCEDURE `p4`(IN deid VARCHAR(20),OUT NAME VARCHAR(25),OUT pwd VARCHAR(25))
    BEGIN
    SELECT uname,upwd INTO NAME,pwd FROM fu_white_user WHERE dessid = deid LIMIT 1;
    END
    看上边的过程,数据库应该用的不是oracle.
      

  2.   

    mysql的
    Exception in thread "main" java.lang.NullPointerException
    at com.domain.DemoTest.query(DemoTest.java:101)
    at com.domain.DemoTest.main(DemoTest.java:114)
      

  3.   

     stmt.execute();//此处应该赋给ResultSet类型rs变量把?
      String name=stmt.getString(2);//应该此处报空的。
      String re=stmt.getString(3);//同上
    ===========================================
    rs.close();
    stmt.close();
    con.close();
    //这些关闭是要先判空再close的。
    =================================
      

  4.   

    一个返回boolean 一个返回ResultSet 是不行的
      

  5.   

    我 rs.close()没写 我给关闭了 所以就空指向了
      

  6.   

    CREATE DEFINER=`root`@`localhost` PROCEDURE `p4`(IN deid VARCHAR(20),OUT NAME VARCHAR(25),OUT pwd VARCHAR(25))
    BEGIN
    SELECT uname,upwd INTO NAME,pwd FROM fu_white_user WHERE dessid = deid LIMIT 1;
    这么写的话只能去出一行 limit 1如果把limit 去掉就是下面这个异常 我如何 解决这个问题呢
    222
    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Result consisted of more than one row
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
    at com.mysql.jdbc.Util.getInstance(Util.java:384)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3566)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3498)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2568)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2113)
    at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1364)
    at com.mysql.jdbc.CallableStatement.execute(CallableStatement.java:879)
    at com.domain.DemoTest.query(DemoTest.java:120)
    at com.domain.DemoTest.main(DemoTest.java:141)