【发布时间】:2020-02-18 18:40:40
【问题描述】:
我正在尝试构建一个通用方法,其目的是将值插入到 SQL 表中
问题在于 SQL 表仅在运行时才知道。
该方法接收一个字符串,该字符串指定要插入的值。由于设计问题,这是它收到的唯一参数:它的签名:
public Integer create(String values){}
我的问题是:我如何编写代码,让该方法知道它有哪些列 - 在字符串名称中?
我在想:
Statement s = c.createStatement(); //c is of type Connection
String insert_Q = "INSERT INTO " + tableName + (THIS IS WHERE I AM STUCK - HOW TO RETRIEVE COLUMNS??) + " VALUES('" + VALUES + "');" ;
s.executeUpdate(insert_Q);
提前致谢!
【问题讨论】:
-
SQL 是一种声明性语言。对于插入,you 告诉 SQL 哪些列应该接收哪些值。即使您可以以某种方式猜测内部列顺序,它也可能在引擎盖下的任何位置发生变化。所以,你应该弄清楚目标列是什么。
-
@Tim Bieelisen 谢谢。所以你建议没有办法在运行时知道我有哪些列用于 MySQL 表?
-
您可以找出这些信息,但问题是,即使您获得了列名列表,您仍然需要以某种方式将它们与值的集合相关联要插入。所以...在开始编写 Java 代码之前,您确实应该弄清楚列名和目标。
-
“因为设计问题...” 我猜问题是没有没有设计。是时候改变设计了。我建议让这个函数使用
HashMap而不是单个字符串。
标签: java mysql sql dynamic insert