这是我的方法:
@Override
public void deleteOneRecord(String tableName, String id) throws ClassNotFoundException, SQLException{
// Validate the parameters here.
// String sql = "DELETE FROM " + tableName + " WHERE " + column + "=" + value;
String pKeyColumnName = "";
// Statement stmt = conn.createStatement();
DatabaseMetaData dmd = conn.getMetaData();
ResultSet rs = dmd.getPrimaryKeys(null, null, tableName);
while(rs.next()){
pKeyColumnName = rs.getString("COLUMN_NAME");
System.out.println("PK column name is " + pKeyColumnName);
}
//String sql = "delete from " + tableName + " where " + pKeyColumnName + "=" + id;
String sql2 = "delete from ? where ?=?";
PreparedStatement pstmt = conn.prepareStatement(sql2);
pstmt.setString(1, tableName);
pstmt.setString(2, pKeyColumnName);
pstmt.setInt(3, Integer.parseInt(id));
pstmt.executeUpdate();
}
这是我的测试主测试:
public static void main(String[] args) throws ClassNotFoundException, SQLException {
DBStrategy db = new MySqlDBStrategy();
db.openConnection("com.mysql.jdbc.Driver", "jdbc:mysql://localhost:3306/book", "root", "admin");
System.out.println(db.findAllRecords("author", 0).toString());
db.deleteOneRecord("author", "2");
System.out.println(db.findAllRecords("author", 0).toString());
db.closeConnection();
}
db对象工作,打开连接工作,我的find all records方法工作,然后我的deleteOneRecord崩溃。我收到以下错误:
线程“main”中的异常com.mysql.jdbc.exceptions.jdbc4. MySQLSyntaErrorException:您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以在第1行的“作者”附近使用正确的语法,其中“author_id”=2
现在我的语法没有改变,几分钟前我只是将此代码作为语句
运行,没有问题,所以我一定是以某种方式错误地使用了准备语句
。
任何帮助都将不胜感激。
我不相信您可以为表名或列名使用参数。您必须将它们连接到字符串中。根据它们的来源,小心SQL注入漏洞!
我不太明白java中语句的定义。我在网上读了很多页,还有其他问题,但没有一个能给我一个准确的答案。 我们这里有多少陈述? 我想说,这是一个声明。然而,我们也可以这样写: 这是两个声明,对吗?
我对< code>where子句中的case语句有一些问题。如果有人知道如何解决这个问题,请帮助我!谢谢你。 下面是日志中的错误: 原因:org.hibernate.hql.internal.ast.QuerySyntaxException: 意外的 AST 节点: 和靠近第 1 行, 列 589 [从 com.itengine.bettinggateway.dao.事件中选择 e.事件 tp.事
本文向大家介绍Java中的Switch语句,包括了Java中的Switch语句的使用技巧和注意事项,需要的朋友参考一下 switch语句允许针对值列表对变量进行相等性测试。每个值称为一个案例,并针对每种情况检查要打开的变量。首先让我们看一下语法- 以下是适用于Java中switch语句的规则- switch语句中使用的变量只能是整数,可转换整数(字节,短整数,字符),字符串和枚举。 开关内可以有任
本文向大家介绍Java中无法访问的语句错误,包括了Java中无法访问的语句错误的使用技巧和注意事项,需要的朋友参考一下 由于多种原因导致无法编译代码时,发生无法访问的代码错误,其中包括:无限循环,无法访问的代码行之前的return语句。 让我们看一个例子- 示例 输出结果 名为Demo的类包含主函数,并定义了一个值,并检查该值并运行空的“ for”循环。如果找到该值,则控件会跳出循环,否则将显示一
我有个商品表里面有30多万的数据,商品标题是中文,系统模糊查询的时候老是会显示慢,同时我在这个字段创建了一个普通索引;但是查询还是会慢?请教高手要如何进行优化? select * from goods_name where title_name like "%电器%"
代码: 作业: 在直角三角形中,最长边长度的平方等于其他两条边长度的平方之和。编写一个程序,提示用户输入三角形三条边的长度,然后输出一条消息,指示三角形是否为直角三角形。无论输入三条边的长度顺序如何,该程序都可以正常工作。 我的问题:代码无法编译,找到:变量,必需:值 另外:我不知道如何制作,这样程序就可以知道三角形是否正确,即使边没有按顺序给出。请帮忙,我是一个初学者,在这项作业上有很多困难。