通过jsp页面将表单数据插入数据库中的两个不同表中

我有下面的代码,它没有在数据库上添加任何插入,但是如果我删除第二个“

myStatement.executeUpdate(insert)”,它将带我第一个插入(sqlstring)…如何运行两个插入并保存数据对于两个表???更具体地说,我需要从用户表单中获取数据并将其保存到数据库中,但这是重点…在复选框中,用户可以检查两个或更少的对象…所以如果表和表的形式可以帮助我是正确的,如果正确,我该怎么做才能采用复选框的两个值并将它们插入一个表中…

 <%@page import="java.sql.*" %> 

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>create dest code</title>

</head>

<body>

<%

String id8=request.getParameter("id8");

String id9=request.getParameter("id9");

String id10=request.getParameter("id10");

String ch1=request.getParameter("dest1");

String empty= "";

boolean flag=false;

if (!(id8.equals(empty) | id9.equals(empty) | id10.equals(empty) )) {

try {

Class.forName("com.mysql.jdbc.Driver");

String myDatabase = "jdbc:mysql://localhost:3306/project_app?user=root&password=1234";

Connection myConnection = DriverManager.getConnection(myDatabase);

Statement myStatement = myConnection.createStatement();

String sqlString = "INSERT INTO dest(Country,City,URL) VALUES ('"+id8+"', '"+id9+"','"+id10+"')";

String insert= "INSERT INTO dest_has_categories(Categories_idCategories) VALUES ('"+ch1+"')";

try{

myStatement.executeUpdate(sqlString);

myStatement.executeUpdate(insert);

}catch(SQLException sqlException) {

%>

<%

flag = true;

}

if(flag == false ){

}

// Close the connection to the database

myStatement.close();

myConnection.close();

}catch(Exception e){

e.printStackTrace();

}

}else{

%>

<%

}

%>

PS:您可以看到有两个不同的插入表…

html页面:

  <form name="createdest" method="get" action="../jsp/create-dest-code.jsp">

Country: <input type="text" required name="id8" /> <br>

City: <input type="text" required name="id9" /> <br>

URL Video: <input type="url" required name="id10" /> <br> <br>

<i><ins>Categorize the destination (max 2): </ins></i> <br> <br>

<input type="checkbox" name="dest1" value="2" onClick="return KeepCount()" >Christmas<br>

<input type="checkbox" name="dest2" value="1" onClick="return KeepCount()" >Winter <br>

<input type="checkbox" name="dest3" value="3" onClick="return KeepCount()" >Summer <br> <br>

<input type="submit" class="button" value="CREATE DESTINATION" />

<br>

</form>

<SCRIPT LANGUAGE="javascript">

function KeepCount() {

var NewCount = 0;

if (document.createdest.dest1.checked)

{NewCount = NewCount + 1;}

if (document.createdest.dest2.checked)

{NewCount = NewCount + 1;}

if (document.createdest.dest3.checked)

{NewCount = NewCount + 1;}

if (NewCount == 3)

{

alert('Pick Just Two Please');

document.createdest; return false;

}

}

</SCRIPT>

mysql表:

CREATE TABLE IF NOT EXISTS `project_app`.`Dest` (

`idDest` INT NOT NULL AUTO_INCREMENT,

`Country` VARCHAR(45) NULL,

`City` VARCHAR(45) NULL,

`URL` VARCHAR(45) NULL,

PRIMARY KEY (`idDest`))

CREATE TABLE IF NOT EXISTS `project_app`.`Categories` (

`idCategories` INT NOT NULL,

`Categories` VARCHAR(45) NULL,

PRIMARY KEY (`idCategories`))

CREATE TABLE IF NOT EXISTS `project_app`.`Dest_has_Categories` (

`Dest_idDest` INT NOT NULL ,

`Categories_idCategories` INT NOT NULL,

PRIMARY KEY (`Dest_idDest`, `Categories_idCategories`),

INDEX `fk_Dest_has_Categories_Categories1_idx` (`Categories_idCategories` ASC),

INDEX `fk_Dest_has_Categories_Dest_idx` (`Dest_idDest` ASC),

CONSTRAINT `fk_Dest_has_Categories_Dest`

FOREIGN KEY (`Dest_idDest`)

REFERENCES `mydb`.`Dest` (`idDest`)

ON DELETE NO ACTION

ON UPDATE NO ACTION,

CONSTRAINT `fk_Dest_has_Categories_Categories1`

FOREIGN KEY (`Categories_idCategories`)

REFERENCES `mydb`.`Categories` (`idCategories`)

ON DELETE NO ACTION

ON UPDATE NO ACTION)

INSERT INTO categories(idCategories,Categories) VALUES (1,'Winter');

INSERT INTO categories(idCategories,Categories) VALUES (2,'Christmas');

INSERT INTO categories(idCategories,Categories) VALUES (3,'Summer');

回答:

回答:

为您的两个插入操作创建两个不同的Statement实例。

回答:

如果要重用一个Statement实例,请在 模块中关闭资源。实际上,将close语句放在

块中或简单地使用jdk7 +必须提供的 总是一个好主意。

回答:

  • 强烈建议您避免在jsp文件中使用Java代码。搜索术语“ jsp servlet mvc”。
  • 使用PreparedStatement而不是Statement来避免SQL注入攻击。

编辑解决方案1:

在您的第一个try块中:

Statement myStatement = myConnection.createStatement();

add下 Statement myStatementTwo = myConnection.createStatement();

在你的第二个try块:

改变myStatement.executeUpdate(sqlString);

myStatementTwo.executeUpdate(sqlString);

在您的第一个try块中添加一个final块,并在那里关闭所有资源。编辑代码与从头开始重写所有内容几乎相同,如果您能自己做的话,它将对您最大的好处。

OP提供HTML代码和数据库后进行编辑

你 表的 是一个

列,但它也是一个外键引用 的主键 。参考表(联合表)的外键

为auto_increment。如果参考表中不存在DBMS生成的自动递增值,则会出现问题。

请使外键不是auto_increment,并且当您插入参考表 ,请插入现有

的ID和 的ID。

另外,更改代码时,请确保也使用我的解决方案2以获得最佳实践。

以上是 通过jsp页面将表单数据插入数据库中的两个不同表中 的全部内容, 来源链接: utcz.com/qa/403481.html

回到顶部