错误代码片段如下:
Connection conn = c.doGetConnection(); //取得Connection对象的一个方法
String sql = "INSERT INTO ? VALUES(?,?)"; //在一个表中添加一行记录
String tableName = new String("account");
String[] values = new String[2];
values[0] = "22222222";
values[1] = "22222222";
PreparedStatement pre = conn.prepareStatement(sql);
pre.setString(1,tableName ); //设置表名为 “account”
pre.setString(2,values[0]);
pre.setString(3, values[1]);
pre.executeUpdate();
执行后报如下错误:
java.sql.SQLSyntaxErrorException: ORA-00903: 表名无效
于是我不用?来代替表名,修改红色部分的代码后执行成功,修改后的代码如下:
Connection conn = c.doGetConnection(); //取得Connection对象的一个方法
String sql = "INSERT INTO account VALUES(?,?)"; //在account表中添加一行记录
String[] values = new String[2];
values[0] = "22222222";
values[1] = "22222222";
PreparedStatement pre = conn.prepareStatement(sql);
pre.setString(1,values[0]);
pre.setString(2, values[1]);
pre.executeUpdate();
这是为什么呀,我的理解是setString方法可以替换过了“?”所在的位置的值,但是却不能替换表名,是这样的吗?恳请大伙帮帮忙。
------解决方案--------------------
1.setString/setInt.....实际上用的是数据库的绑定变量,顾名思义,只能替换变量。
2.setString最终生成的SQL时会在?前后都加上''。
------解决方案--------------------
我所知道的所有数据库,都不能这样子搞。
你还是在生成PS之前,用Java程序替换掉。
String sqlTemplate = "INSERT INTO __TABLE_NAME__ VALUES(?, ?)";
String sql = sqlTemplate.replaceAll("__TABLE_NAME__", "account ");