String spSQL = "{call DB***..balabalaTable}";
是在之前我想开发要的时候给我的是这么个语句:
exec DB***..balabalaTable
能是开发好心的将call改成了exec,为了方便我在数据库中直接查询, 怕我不知道。于是我就懵逼了,查了半天才知道是存储过程等等,也没弄明白。就一直在那写代码call。 最后弄明白,是在数据库里面可以直接这样执行CALL,但是要加{}:
也就是在数据库中直接查询以下是等价的:
exec DataIndex..balabalaReport
等价于{call DataIndex..PDF_getListOfStocksForERReport}
就一句话:
exec是sqlplus的命令,只能在sqlplus(查了下 应该是 客户端操作)中使用; call是sql命令,任何工具都可以使用,call必须有括号,即使没有参数。
而写在代码中是下面这样的:
public static void getconnectionDB(String spSQL)
throws SQLException, InstantiationException, IllegalAccessException, ClassNotFoundException {
String dbURL = "jdbc:jtds:sqlserver://balabala.balabala.com:1433/balabala;balabala=balabala";
String dbUser = "UserName";
String dbPswd = "PassWord";
String dbDriver = "net.sourceforge.jtds.jdbc.Driver";
ResultSet resultSet = null;
CallableStatement csStmt = null;
Connection dbConn = null;
System.out.println("Start connection to DB"); try {
Class.forName(dbDriver).newInstance();
dbConn = DriverManager.getConnection(dbURL, dbUser, dbPswd);
csStmt = dbConn.prepareCall(spSQL);//String sql="{call DB***}";sql语句需要{}
csStmt.execute();//String sql="{call DB***}"; sql语句需要{}
boolean result = csStmt.execute();//String sql="{call DB***}";sql语句需要{}
//正常的查询语句String sql = "SELECT ****";
//java.sql.Statement stmt = dbConn.createStatement();
//boolean result = stmt.execute(spSQL);
if (result) {
resultSet = csStmt.getResultSet();
java.sql.ResultSetMetaData rsmd = resultSet.getMetaData(); int columnCount = rsmd.getColumnCount(); while (resultSet.next()) { for (int i = 0; i < columnCount; i++) {
System.out.print(rs.getString(i + 1) + "\t"); //做一些相关的操作处理
}
} //做一些相关的处理
}
} catch (SQLException e) {
e.printStackTrace();
System.out.println("Connection to database failed");
}finally { //注意关闭SQL的顺序
DbUtils.close(resultSet);
DbUtils.close(csStmt);
DbUtils.close(dbConn);
}
}在代码中执行时:
call DB***语句与正常的SELECT DISTINCT *** from ***是不一样的,正如上面代码中注释的部分和下面两行的代码。 对于SQL初学,若有错误 感谢您能告知,谢谢。