尝试通过向其中动态添加列来更改MySQL表时出错,其中列名是存储在Java数组变量中的值。
try
{
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql","root","123");
Statement stmt=con.createStatement();
stmt.executeUpdate("create table distable (patient integer)");
PreparedStatement pst=con.prepareStatement("alter table distable add ? varchar(50)");
for(i=1;i<=col;i++)
{
pst.setString (1,out[i]);
pst.executeUpdate();
}
con.close();
}
catch(Exception e)
{
System.out.println(e);
}
这里con是保持连接的变量。使用连接我在MySQL中创建了一个表,表的名称是&#34; distable&#34;。桌子&#34; distable&#34;最初包含一个名为Patient的整数列。
我需要改变桌子&#34; distable&#34;并在运行时添加新列。正如我所说,每列的名称必须是Java中存储在数组中的值。因此我使用了PreparedStatement,其中包含一个&#39;?&#39;这是列名的替代品。
在运行时插入的列数存储在变量&#34; col&#34;中。我已经使用setString()在运行时设置列名。列名存储在名为&#34; out&#34;的数组中。我已经使用executeUpdate()来执行查询。
当我运行此代码时,我得到的错误是:
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:您有错误 在你的SQL语法中;查看与MySQL对应的手册 服务器版本,以便在&#39; &#39; GSM22449&#39; 附近使用正确的语法 VARCHAR(50)&#39;在第1行
&#39; GSM22449&#39;是存储在数组[即 out [1] = GSM22449]中的第一个值。因此,它实际上是在&#39;?&#39;的地方取而代之的?在查询中。但查询未执行。
错误在哪里?语法有问题吗?
答案 0 :(得分:0)
我认为你不需要指定&#34; COLUMN&#34;添加列时的关键字。以下是添加列
的正确语法ALTER TABLE table_name
ADD column_name datatype
所以你的语句创建行应该是这样的,
PreparedStatement pst=con.prepareStatement("alter table distable add ? varchar(50)");
<强>更新强>: 刚想通了?参数仅适用于数据,不适用于列名。如果您需要以这种方式生成列名称,则可以使用字符串连接。例如,
"alter table distable add " + COLUMN_NAME + " varchar(50)"
确保列名不是用户输入,否则它将邀请XSS(跨站点脚本)。