java – JDBC PrepareStatement参数不适用于CREATE,DROP,ALTER
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – JDBC PrepareStatement参数不适用于CREATE,DROP,ALTER,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1818字,纯文字阅读大概需要3分钟。
内容图文
![java – JDBC PrepareStatement参数不适用于CREATE,DROP,ALTER](/upload/InfoBanner/zyjiaocheng/728/de2e212078f840659519532d45ab2691.jpg)
参见英文答案 > ORA-00903: invalid table name on PreparedStatement 1个
> Create a dynamic name table with Prepared Statement in java 2个
> Using Prepared Statements to set Table Name 6个
> Escaping single quotes in table SQL queries 3个
我需要使用JDBC来创建新的Oracle用户.用户通过GUI提供新用户的用户名和密码.以下代码工作正常(我也可以使用Statement而不是PreparedStatement).
PreparedStatement preparedStatement = connection.prepareStatement("create user " + username + " identified by " + password);
preparedStatement.execute();
但是,由于用户名和密码是由用户提供的,因此它们可能包含空格,半列,引号等特殊字符,这可能使上述语句无效.我不希望我的代码对用户名和密码进行验证,并将其留给Oracle进行验证.因此,我想到在预准备语句中使用参数:
PreparedStatement preparedStatement = connection.prepareStatement("create user ? identified by ?");
preparedStatement.setString(1, userName);
preparedStatement.setString(2, password);
preparedStatement.execute();
但它根本不起作用.当我提供有效的用户名和密码时,我将收到“ORA-01935:缺少用户名或角色名”.似乎参数不适用于CREATE,DROP,ALTER语句.如何解决我的问题?提前致谢.
解决方法:
用户名和密码不是文本值,而是标识符.
PreparedStatement参数标记(?)用于提供各种数据类型的动态值.它们不能用于提供标识符,例如你不能做SELECT * FROM这样的事情吗?动态指定表名.
字符串连接是唯一的方法,如果标识符包含特殊字符,则需要引用(“)标识符,就像documentation says:
If a password starts with a non-alphabetic character, or contains a character other than an alphanumeric character, the underscore (_), dollar sign ($), or pound sign (#), then it must be enclosed in double quotation marks. Otherwise, enclosing a password in double quotation marks is optional.
内容总结
以上是互联网集市为您收集整理的java – JDBC PrepareStatement参数不适用于CREATE,DROP,ALTER全部内容,希望文章能够帮你解决java – JDBC PrepareStatement参数不适用于CREATE,DROP,ALTER所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。