Java 执行多个查询,在sql语句结束后找到字符

Java 执行多个查询,在sql语句结束后找到字符,java,sql,netbeans,ms-access-2013,Java,Sql,Netbeans,Ms Access 2013,我试图执行下面给出的两个查询,但它给了我在sql语句异常结束后找到的字符。我打算在表2中添加一些来自表1的数据,以及一些来自用户的数据。使用的数据库是ms access数据库 try{ String ad= ((JTextField)jDateChooser1.getDateEditor().getUiComponent()).getText(); String dd= ((JTextField)jDateChooser2.getDateEditor().getUiComp

我试图执行下面给出的两个查询,但它给了我在sql语句异常结束后找到的字符。我打算在表2中添加一些来自表1的数据,以及一些来自用户的数据。使用的数据库是ms access数据库

try{
     String ad=  ((JTextField)jDateChooser1.getDateEditor().getUiComponent()).getText();
     String dd= ((JTextField)jDateChooser2.getDateEditor().getUiComponent()).getText();
     String rt= jTextField8.getText();
     int rn= Integer.parseInt(jTextField2.getText());
     int rr= Integer.parseInt(jTextField3.getText());
     String sr= jTextField7.getText();
     int nn= Integer.parseInt(jTextField4.getText());
     int na= Integer.parseInt(jTextField5.getText());
     int nc= Integer.parseInt(jTextField6.getText());
     int gc= Integer.parseInt(jTextField1.getText());

     stmt= conn.createStatement();
     String squery="insert into Room(GuestCode, Title, FirstName, LastName, Country, State, City, ContactNo) select GuestCode, Title, FirstName, LastName, Country, State, City, ContactNo from GuestDetails where GuestCode=gc;insert into Room(ArrivalDate, DepartureDate, RoomType, RoomNo, RoomRate, SpecialRequirements, NoOfNights, NoOfAdults, NoOfChildren) values(' "+ad+" ',' "+dd+" ',' "+rt+" ',' "+rn+" ',' "+rr+" ',' "+sr+" ',' "+nn+" ',' "+na+" ',' "+nc+" ');";

     rs=stmt.executeQuery(squery);
 }catch(Exception ex){
     JOptionPane.showMessageDialog(null, ex);
 }

不允许在stmt.executeQuery中放入多个语句,因此在;(也可以省略;out)应该放在单独的查询中并单独执行

然而,在再次阅读您的问题描述时(以及在开始编辑以添加准备好的语句时),我发现您试图做的是从1个源中检索一些数据,从范围中的变量中检索其余的数据

只能使用1个insert来插入数据。如果使用“多行”,它们最终将成为多行。 如果您坚持使用2条语句,那么1条应该是insert,另一条应该是update。(仍然运行两个单独的executeQuery以运行它们。)

如果您想在一条语句中完成这项工作,那么您必须以这样一种方式编写您的查询,它将像这样工作

这看起来像是以下内容的副本:

最后:尝试使用准备好的语句来避免sql注入(并使代码更加整洁)


使用
PreparedStatement
(除了遵循Joris的建议外)。做一个负责任的程序员。编写代码时避免SQL注入。请编辑您的答案,以建议使用
PreparedStatement
来避免SQL注入攻击。我也尝试过使用prepared语句,但得到了相同的异常。另外,我对java和sql还不熟悉,所以你能不能解释一下啊,好的一点,我只是关注他眼前的问题,但这也很重要。@pallavi,首先将其拆分为两条语句(因此字符串query1=…和字符串query2=…),并分别执行它们。然后还要使用准备好的语句,因为它们是运行sql的更好、更安全的方法。我将用一个例子更新我的答案
PreparedStatement statement = conn.prepareStatement("select abc from xyz where x = ?");
statement.setString(1, "value you want to match x with";
statement.executeQuery();

// this will replace the value of the first ? with "value you want to match x with"