前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL中exec和call的使用

SQL中exec和call的使用

作者头像
软测小生
发布2019-07-05 11:02:05
2.7K0
发布2019-07-05 11:02:05
举报
文章被收录于专栏:软测小生软测小生软测小生
今天在读取数据库的时候,搞了一上午,遇到个坑,归根结底还是术业不精! 由于对执行命令 CALL和EXEC的无知,数据库的无知,以前学过,忘记了。 还得加强学习啊。 从开发小姐姐那儿得到的是这么一句SQL语句(开发代码里面的如下):
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初学,若有错误 感谢您能告知,谢谢。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软测小生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档