jdbc mysql 存储过程执行失败_JDBC连接执行MySQL存储过程报空指针或权限错误

JDBC连接执行MySQL存储过程报空指针或权限错误

最近使用root用户编写了几个存储过程,但是使用普通用户通过JDBC连接执行却报错:

java.lang.NullPointerException......

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.

报哪个错要看你使用的Connector/J版本了。

这是因为JDBC调用存储过程时需要有show create procudure 权限或是有表mysql.proc的select权限。通过在JDBC连接属性中设置noAccessToProcedureBodies=true(默认false)解决或是授予普通用户相应的权限或者是按http://lists.mysql.com/commits/17817中的patch修改。

该noAccessToProcedureBodies=true的影响:

1. 调用存储过程时,将没有类型检查,设为字符串类型,并且所有的参数设为in类型,但是在调用registerOutParameter时,不抛出异常。

2. 存储过程的查询结果无法使用getXXX(String parameterName)的形式获取,只能通过getXXX(int parameterIndex)的方式获取。

参考:

http://bugs.mysql.com/bug.php?id=20235

http://bugs.mysql.com/bug.php?id=24065

相关文档:

今天小编要和大家说的是handler的用法,希望对大家有所帮助。

HANDLER tbl_name OPEN [ AS alias ]

HANDLER tbl_name READ index_name { = | >= | <= | < } (value1,value2,...)

[ WHERE where_condition ] [LIMIT ... ]

HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST } ......

java中时间戳和时间字符串之间的转换

获取当前的unix时间戳

new Date().getTime()

System.currentTimeMillis()

返回的是毫秒数,要转换long t = System.currentTimeMillis()/1000;

获取当前年月日以及时分秒

Calendar c = Calendar.getInstance();

c.get(Calendar.YEAR))  c.get(Calendar.YEAR))  c.get(C ......

mysql执行sql语句时有时会出现CR_COMMANDS_OUT_OF_SYNC错误(2014)

提示语为

commands out of sync; you can't run this command now

网上对此错误的描述很少,而且没有给出解决方法。

其实这是因为上一个sql执行返回了多个结果集,但没有把结果都取出来,就执行了新的sql语句,就会产生这个错误。

应在sql语句执行后 ......

启动:net start mySql;

进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;

列出数据库:show databases;

选择数据库:use databaseName;

列出表格:show tables;

显示表格列的属性:show columns from tableName;

建立数据库:source fileName.txt;

匹配� ......

备份MySQL数据库的命令

mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql

备份MySQL数据库为带删除表的格式

备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。

mysqldump -–add-drop-table -uusername -ppassword databasename > backu ......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值