【问题标题】:Include quotation marks around a variable in a string在字符串中的变量周围包含引号
【发布时间】:2014-02-26 18:01:11
【问题描述】:

我想编译一个名为 FinalQuery 的查询,但它的一部分必须在引号内。必须进入引号内的部分是一个字符串变量。

更详细的-

  1. 将此 FinalQuery 查询提供给 JFreeChart 以制作饼图。
  2. 但 FinalQuery 是在程序中编译的,根据用户的某些选择。
  3. 用户的选择是在 JComboBox 中进行的。

这里是代码 -

public class Execute extends JFrame {
private JComboBox comboAccountName = new JComboBox();

public Execute() {
    ....................

    getContentPane().add(comboAccountName);
    comboAccountName.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            CompileQuery();
        }
    });

final String query = CompileQuery(); //variable query is executed in JFreeChart

JButton btnDraw = new JButton("Draw");
    btnDraw.setFont(new Font("Segoe UI Symbol", Font.BOLD, 15));
    btnDraw.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            try {
JDBCPieDataset hdataset = new JDBCPieDataset(DatabaseConnection.ConnectDB(), query);
JFreeChart chart = ChartFactory.createPieChart("Query",
                        hdataset, true, true, false);
...............}


String CompileQuery()
{
    String getAccountName = (String)comboAccountName.getSelectedItem();
    String FinalQuery = "SELECT status, COUNT(status) FROM main WHERE [Account Name] = "+getAccountName+" GROUP BY status";
    System.out.println(FinalQuery);
    return FinalQuery;
};

public static void main(String[] args) {
    Execute frame1 = new Execute();
    frame1.setVisible(true);
}

}

但在 SQL 查询中,WHERE [XYZ] = ?必须在引号中提供。例如。 WHERE [Account Name] = "John"。

目前我的查询是一种格式 -

SELECT xyz FROM pqr WHERE abc = 变量名

SELECT status, count(status) 
FROM main
WHERE [Account Name] = getaccountName (variable)
GROUP BY status;

我想把变量名放在引号中,这样看起来像

SELECT xyz FROM pqr WHERE abc = "变量名"

SELECT status, count(status) 
FROM main
WHERE [Account Name] = "getaccountName" (variable)
GROUP BY status;

请建议我如何让我的 FinalQuery 字符串变量在其中包含另一个变量的引号。

【问题讨论】:

  • 我认为... WHERE [Account Name] = \""+getAccountName + "\"..."; 应该可以工作。
  • 如果您不能使用 PreparedStatement,只需转义引号即可。此外,Java 中的方法和变量名称应以小写字母开头。

标签: java sql database


【解决方案1】:

但它的一部分必须在引号内。必须进入引号内的部分是字符串变量

使用 PreparedStatment。它将使用正确的语法为您构建 SQL,您可以轻松地指定要使用的常量或变量:

String sql = "INSERT INTO Page (Name, Title) VALUES (?, ?)";

PreparedStatement stmt = connection.prepareStatement(sql);

stmt.setString( 1, nameVariable );
stmt.setString( 2, "Title1" );
stmt.executeUpdate();

【讨论】:

  • 我不能使用 PreparedStatement。我的 JFreeChart 是这样设置的(更新问题)
猜你喜欢
  • 1970-01-01
  • 2017-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多