2015-05-31 64 views
0

所以我想要做的是SQL - 爪哇 - UPDATE语句查询

JButton GrantButton = new JButton("Grant Seller Access"); 
GrantButton.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent arg0) { 
     try { 
      String update_query = "UPDATE user SET usertype = 'seller' WHERE email = " & GrantField.getText()";" 
      //Here is where the error is stated on eclipse 

      PreparedStatement pSt = connect.prepareStatement(update_query); 
      pSt.setString(1, GrantField.getText()); 

      pSt.execute(); 

      JOptionPane.showMessageDialog(null, "The Request has been approved"); 

     } catch (Exception e) {        
      e.printStackTrace(); 
     }   
    } 
}); 
“中的‘用户’表 WHERE电子邮件更新‘用户类型’列从文本获得(/用户)值”

可以做到这一点吗?

任何帮助将不胜感激。

+0

什么错误得到?哪些dbms使用? SQL服务器? – Sachu

+0

'“&GrantField.getText()”;“'是无效的Java代码。**和**你需要告诉我们什么**完全**错误信息。你需要告诉我们你正在使用哪个DBMS –

回答

0

你的sql查询有一些问题。

  1. 表名是User它是一个保留字,以便将其括在“”
  2. 您正在检查邮件。它是VARCHAR,所以应该在'
  3. 务必附上尝试使用参数化的SQL查询,这将避免SQL注入问题
  4. 你正在做的SetString的值传递给查询,但在查询您 没有指定地方该值应该被替换。

    String update_query ="UPDATE "user" SET usertype = 'seller' WHERE email = '" & GrantField.getText()&"';" PreparedStatement pSt = connect.prepareStatement(update_query); //pSt.setString(1, GrantField.getText()); this statement not needed because you are providing the value in query iteself pSt.execute();

OR

String update_query = "UPDATE [user] SET usertype = 'seller' WHERE email = ?" ; 
PreparedStatement pSt = dbConnection.prepareStatement(update_query); 
pSt.setString(1,GrantField.getText()); 
pSt.execute(); 
+0

你怎么知道Minto正在使用Microsoft SQL Server?这个问题只用'sql'标记,所以答案应该使用标准的SQL。在SQL中,保留字需要用'''引用,所以它应该是''user''而不是'[user]' –

+0

@a_horse_with_no_name谢谢我编辑的队友。 – Sachu

0

您的update_query不正确。您正在PreparedStatement上使用setString,但是您没有指定将此值插入到查询中的位置(您的查询未被参数化)。指定你需要写?你想插入价值的地方。用户也是数据库中的保留字,所以最好不要使用这个名字。例如:

String update_query = "UPDATE [table_name] SET usertype = seller WHERE email = ?" ; 
PreparedStatement preparedStatement = dbConnection.prepareStatement(update_query); 
preparedStatement.setString(1,Value);// this value will be replaced at ? 

如果你不知道如何从Java连接到数据库,并创建连接,你需要从了解它:http://docs.oracle.com/javase/tutorial/jdbc/

+0

你怎么知道Minto正在使用Microsoft SQL Server?这个问题只有'sql'标记,所以答案应该使用标准的SQL,而SQL保留字需要使用'''引用。所以它应该是''user''而不是'[user]' –

0

试图用单引号像这样的包装您的文本框的值:

String update_query = "UPDATE user 
         SET usertype = 'seller' 
         WHERE email = '" & GrantField.getText() & "';" 

我在getText()后添加了&符号。

0

就修改这部分

String update_query = "UPDATE user SET usertype = 'seller' WHERE ***email = '" + GrantField.getText()+"';*** 

希望它可以为你工作。