java - java和mysql(j-connector)如何使用preparedStatement创建表?
问题描述
我想使用 PreparedStatement 创建一个 mysql 数据库表,我想用字符串取表名。字符串可能有一些撇号,所以我尝试使用以下代码:
Connection cn=DriverManager.getConnection("jdbc:mysql://localhost:3306/chatclient?user=root&password=");
String sql="CREATE TABLE chatclient.? ( username VARCHAR(255) NOT NULL , msg TEXT NOT NULL ) ENGINE = InnoDB;";
PreparedStatement ps=cn.prepareStatement(sql);
ps.setString(1,"nametable");
ps.executeUpdate();
那是错误:
Exception in thread "main" java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''tablename' ( username VARCHAR(255) NOT NULL , msg TEXT NOT NULL ) ENGINE = ' at line 1
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)
at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:370)
at socket.prova.main(prova.java:27)
但不行,我试过没有“?” 并且没有 setString:
Connection cn=DriverManager.getConnection("jdbc:mysql://localhost:3306/chatclient?user=root&password=");
String sql="CREATE TABLE chatclient.nametable ( username VARCHAR(255) NOT NULL , msg TEXT NOT NULL ) ENGINE = InnoDB;";
PreparedStatement ps=cn.prepareStatement(sql);
ps.executeUpdate();
这段代码工作,我认为错误是我使用它的时候?用 ps.setString() 设置用''分隔的文本如:
String sql="CREATE TABLE chatclient.? etc."
PreparedStatement ps=cn.prepareStatement(sql);
ps.setString("tablename");
ps.executeUpdate();
ps.setString() 方法将字符串更改为“CREATE TABLE chatclient.'tablename' etc.”
有谁知道如何使 ps.setString 自动避免定界(带')?或者有谁知道如何以不同的方式解决它?
解决方案
推荐阅读
- angular - Angular 6 - ForkJoin 没有导出的成员
- docker - dynamic KAFKA_ADVERTISED_HOST_NAME on kafka continer
- angular - 是否有用于音频管理的 Angular 4 npm 包?
- c# - 重构代码以制作更通用的方法
- node.js - Node.js HTTPS 配置错误 - 没有通用加密算法
- java - pdf文件无法从jar ubuntu 16.04打开
- html - 如何在其他文本的相同高度写文本,但在另一侧?
- wordpress - 嵌入短代码和 oEmbed 在 Wordpress 上不起作用
- java - Hibernate 一对一注释行为怪异
- c# - 在 Unity 中检测碰撞并销毁游戏对象