JDBC连接执行MySQL存储过程报权限错误
在java中通过JDBC连接MySQL执行存储过程时报错:
java.sql.SQLException: User does not have access to metadata required to determine stored procedure parameter types. If rights can not be granted, configure connection with "noAccessToProcedureBodies=true" to have driver generate parameters that represent INOUT strings irregardless of actual parameter types.
经过查阅资料得知,JDBC在调用存储过程时不光用户要有execute的权限,还需要对mysql.proc具有访问权限。否则它无法访问metadata。有两种解决方法:
一.给数据库连接设置一个noAccessToProcedureBodies属性,属性值为true,示例如下:
jdbc:mysql://ipaddress:3306/test?noAccessToProcedureBodies=true
网上说设置noAccessToProcedureBodies=true会带来一些影响(未经考证):
1. 调用存储过程时,将没有类型检查,设为字符串类型,并且所有的参数设为in类型,但是在调用registerOutParameter时,不抛出异常。
2. 存储过程的查询结果无法使用getXXX(String parameterName)的形式获取,只能通过getXXX(int parameterIndex)的方式获取。
二.给数据库用户赋权,赋执行mysql.proc表的select权限,示例如下:
GRANT SELECT ON mysql.proc TO 'user'@'localhost';
参考资料:
- http://stackoverflow.com/questions/986628/mysql-java-cant-execute-stored-procedure
- http://space.itpub.net/18945822/viewspace-683363
- http://cau99.blog.51cto.com/1855224/348792
相关推荐
总的来说,Java通过JDBC调用MySQL存储过程涉及到连接数据库、创建`CallableStatement`、执行存储过程和处理结果。这使得开发者能够在Java应用中灵活地利用数据库提供的强大功能,实现更高效的数据处理。
### Java连接MySQL数据库(JDBC驱动) #### 软件下载 - **MySQL**: 版本 4.1.11 下载地址: [http://dev.mysql.com/downloads/mysql/4.1.html](http://dev.mysql.com/downloads/mysql/4.1.html) - **JDBC驱动**: ...
在本压缩包中,包含的是DolphinScheduler的安装包以及MySQL的JDBC连接器,这将帮助用户将DolphinScheduler与MySQL数据库进行集成,实现任务调度的数据存储。 Apache DolphinScheduler 1.3.4是该版本的安装包,名为`...
Oracle和MySQL是两种广泛应用的关系型数据库管理系统,它们各自都有对应的JDBC驱动,使得Java应用程序能够方便地与这两种数据库建立连接。 1. Oracle JDBC驱动: Oracle提供了多种JDBC驱动,包括 Thin 驱动、OCI ...
在本"mysql存储过程修炼"的学习资料中,我们将深入探讨MySQL存储过程的概念、创建、执行以及其在实际应用中的优势。 一、存储过程的基础概念 存储过程是由一个或多个SQL语句组成的集合,这些语句在服务器端编译并...
本示例中的"struts2+jdbc连接mysql"旨在向初学者展示如何在Struts2框架下,利用JDBC API与MySQL数据库进行交互,实现数据的增删改查操作。以下将详细介绍这一过程中的关键知识点: 1. **Struts2框架基础**: - ...
在项目中,你需要通过JDBC驱动与MySQL建立连接,执行SQL语句,如CRUD(创建、读取、更新、删除)操作,以完成购物系统的数据存储和检索。 4. **MySQL**: MySQL是一款流行的开源关系型数据库管理系统,适用于Web应用...
除了基本的数据库连接,MySQL Connector/J还支持许多高级特性,如事务处理、预编译的SQL语句、批处理操作、存储过程调用等。此外,它还提供了连接池功能,可以提高应用性能,尤其是在高并发场景下。 在开发过程中,...
JDBC 也提供了多种方式来执行 SQL 语句,包括使用 Statement 对象执行 SQL 语句,使用 PreparedStatement 对象执行带参数的 SQL 语句,还可以使用 CallableStatement 对象执行存储过程。 JDBC 提供了多种方式来处理...
通常,我们使用JDBC来连接和操作关系型数据库,如Oracle、MySQL等。然而,JDBC不仅可以用于传统的关系数据库,还可以通过扩展来连接非关系型数据存储系统,比如LDAP(Lightweight Directory Access Protocol)目录...
3. **JDBC(Java Database Connectivity)**:JDBC是Java连接数据库的标准API,它提供了连接、查询、更新和管理数据库的能力。在注册和登录系统中,JDBC用于与MySQL数据库进行交互。在注册过程中,JDBC可以帮助插入...
本篇文章将深入探讨如何使用Android JDBC来直接连接MySQL数据库,以及在这个过程中可能遇到的关键知识点。 首先,理解JDBC的基础是必要的。JDBC是Java语言的一个标准接口,它为各种数据库提供了统一的访问方式。在...
在医疗管理系统中,MySQL存储了医生和病人的信息,如姓名、性别、年龄、联系方式等关键数据,支持高效的数据查询和更新。 描述中的"Servlet"是Java Servlet,它是一种服务器端的Java应用程序,主要用于扩展Web...
2. **处理权限**:由于Android应用需要通过网络连接到MySQL服务器,所以需要在AndroidManifest.xml文件中添加INTERNET权限: ```xml ``` 3. **建立连接**:在Android应用中,你可以创建一个线程或者使用...
如果连接字符串错误,程序将无法与数据库建立连接,进而无法执行存储过程。此外,还要注意存储过程的输入/输出参数类型和顺序,否则可能导致调用失败。 总的来说,调用存储过程涉及到数据库设计、SQL语法、编程接口...
2. `mysql-connector-java-5.1.46.tar.gz`:这是MySQL数据库的Java连接器,用于在Java应用程序(如Guacamole的JDBC身份验证模块)和MySQL服务器之间建立连接。版本5.1.46是一个稳定版本,适用于与MySQL服务器进行...
MySQL是世界上最受欢迎的关系型数据库管理系统之一,尤其在Web应用程序中被广泛应用。...在Windows XP环境中安装MySQL数据库并配置好JDBC连接,开发者就能充分利用MySQL的强大功能来存储和处理数据。
- 处理异常:连接过程可能出现异常,需要进行捕获和处理: ```java try { // 连接代码... } catch (SQLException e) { e.printStackTrace(); } ``` 3. **执行SQL语句**: - 获取`Statement`或`...
1. **JDBC驱动与MySQL连接** - 在Android应用中,我们需要引入MySQL的JDBC驱动(通常为`mysql-connector-java`),这可以通过在项目的`build.gradle`文件中添加依赖来实现: ```groovy dependencies { ...