我是编程新手。 并在SQL查询中使用CONSTANTS 像这样
private static final String TABLE_USERS = "users";
private static final String COLUMN_NAME = "name";
final String query = "SELECT "+COLUMN_NAME+" FROM "+TABLE_USERS;
这是一个好习惯吗?
抱歉愚蠢的问题。 :)
答案 0 :(得分:2)
这些问题是我遇到的最大挑战。 如果你的意思是SQLite,那么防止大项目中的查询字符串错误是好的。
考虑您有多个表:
private static final String TABLE_ROLLS= "rolls";
private static final String TABLE_USERS = "users";
private static final String COLUMN_USERS_ID = "id";
private static final String COLUMN_USERS_NAME = "name";
private static final String COLUMN_ROLLS_ID = "id";
final String query = "SELECT "+COLUMN_USERS_NAME+" FROM "+TABLE_USERS;
希望有所帮助
答案 1 :(得分:1)
是的,它被认为是一种很好的做法,因为如果数据库结构发生了变化,您将希望只需更改类中的常量。
您将这篇文章标记为Java和PHP,但无论哪种方式,您都应该考虑使用查询构建器库。
答案 2 :(得分:1)
编辑:在我回答之前,我确定它有PHP标签。如果没有,请忽略对特定库的引用。
=============================================
这取决于您使用的模式以及您面临的限制,PHP的主要版本。
如果您正在开发一个不太可能发生太大变化的独立应用程序,那么只有在您希望更改表名时才能使用表名的常量。
如果您正在开发可重新分发的应用程序,那么动态表名称(在安装时)很有用,请参阅WordPress的示例。
如果您正在使用像Doctrine2这样的ORM,那么表名在很大程度上是无关紧要的,因为它们大部分被抽象出来并且您正在使用类。
最终,连接SQL的字符串会变得混乱,这就是为什么建议使用查询构建器,这样可以更容易地使用常量。
例如,如果您使用的是PHP5.3 +,则可以使用Doctrine DBAL。您不需要包含ORM来使用DBAL,因为Doctrine的ORM使用"它"而不是相反。如果您熟悉Doctrine2 ORM,您将认识到查询构建器使用类名,但这是ORM魔术将它们转换为真实的表名。
简而言之,我建议使用支持查询构建器的库,它允许您将查询写入逻辑过程而无需连接。一旦你有了这个,除了可能由于错误的原因而使用常量之外没有任何问题。