专栏首页软测小生SQL中exec和call的使用

SQL中exec和call的使用

今天在读取数据库的时候,搞了一上午,遇到个坑,归根结底还是术业不精! 由于对执行命令 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初学,若有错误 感谢您能告知,谢谢。

本文分享自微信公众号 - 软测小生(ruancexiaosheng),作者:小汉

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-11-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【玩转Linux命令】Linux中find常见用法

    find path -option [ -print ] [ -exec -ok command ] {} \;

    软测小生
  • Json Schema 快速入门

    Json schema 本身遵循Json规范,本身就是一个Json字符串,先来看一个例子

    软测小生
  • 如何使用AWS EC2+Docker+JMeter构建分布式负载测试基础架构

    本文介绍有关如何使用AWS EC2+Docker+JMeter创建分布式负载测试基础架构。 完成所有步骤后,得到的基础结构如下:

    软测小生
  • Spring Security入门到实践(一)HTTP Basic在Spring Security中的应用原理浅析

    上面的两点是应用安全的基本关注点,Spring Security存在的意义就是帮助开发者更加便捷地实现了应用的认证和授权能力。

    itlemon
  • linux小知识

    whoami ## 显示当前用户,不同用户权限不同 pwd ## 显示当前所在的工作目录,使用相对路径的时候正确找到文件或目录

    cherishspring
  • ISCA2016:体系结构顶级会议CNN走红,神经网络论文夺桂冠

    【新智元导读】计算机体系结构顶级会议 ISCA2016日前召开,神经网络和深度学习成为热点。新智元整理了 ISCA 2016 神经网络相关论文(包括本届会议最高...

    新智元
  • Andrew Ng机器学习课程笔记--week5(下)

    Neural Networks: Learning 内容较多,故分成上下两篇文章。 一、内容概要 Cost Function and Backpropagat...

    marsggbo
  • 为你的博客注册登陆页面添加【十以内运算验证码】

    神无月
  • pageadmin CMS 验证sql用户名和密码的正确性

    第一个箭头指向的就是服务器名称,如果用ip无法连接sql时候,可以用服务器名称来连接。

    Almost Lover
  • TortoiseSVN文件夹及文件图标不显示解决方法

    由于自己的电脑是win7(64位)的,系统安装TortoiseSVN之后,其他的功能都能正常的使用,但是就是文件夹或文件夹的左下角就是不显...

    用户1212940

扫码关注云+社区

领取腾讯云代金券