在SQL查询中使用CONSTANTS是一种好习惯

时间:2015-08-03 13:27:05

标签: java android mysql sql

我是编程新手。 并在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;

这是一个好习惯吗?

抱歉愚蠢的问题。 :)

3 个答案:

答案 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魔术将它们转换为真实的表名。

简而言之,我建议使用支持查询构建器的库,它允许您将查询写入逻辑过程而无需连接。一旦你有了这个,除了可能由于错误的原因而使用常量之外没有任何问题。