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=================
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=================
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.
Exception in thread "main" java.lang.NullPointerException
at com.domain.DemoTest.query(DemoTest.java:101)
at com.domain.DemoTest.main(DemoTest.java:114)
String name=stmt.getString(2);//应该此处报空的。
String re=stmt.getString(3);//同上
===========================================
rs.close();
stmt.close();
con.close();
//这些关闭是要先判空再close的。
=================================
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)