如何解决如何向用户显示电影列表,让他选择电影并将其保存在表格中?i
我有一个小型Web应用程序,用户可以在其中预订电影。我创建了JSF页面,并以此方式显示数据库中可用的电影列表:
<ui:composition template="/template.xhtml">
<ui:define name="title">
<h:outputText value="#{bundleMovie.ListMovieTitle}"></h:outputText>
</ui:define>
<ui:define name="body">
<h:form styleClass="jsfcrud_list_form">
<h:panelGroup id="messagePanel" layout="block">
<h:messages errorStyle="color: red" infoStyle="color: green" layout="table"/>
</h:panelGroup>
<h:outputText escape="false" value="#{bundleMovie.ListMovieEmpty}" rendered="#{movieController.items.rowCount == 0}"/>
<h:panelGroup rendered="#{movieController.items.rowCount > 0}">
<h:outputText value="#{movieController.pagination.pageFirstItem + 1}..#{movieController.pagination.pageLastItem + 1}/#{movieController.pagination.itemsCount}"/>
<h:commandLink action="#{movieController.previous}" value="#{bundleMovie.Previous} #{movieController.pagination.pageSize}" rendered="#{movieController.pagination.hasPreviousPage}"/>
<h:commandLink action="#{movieController.next}" value="#{bundleMovie.Next} #{movieController.pagination.pageSize}" rendered="#{movieController.pagination.hasNextPage}"/>
<h:dataTable value="#{movieController.items}" var="item" border="0" cellpadding="2" cellspacing="0" rowClasses="jsfcrud_odd_row,jsfcrud_even_row" rules="all" style="border:solid 1px">
<h:column>
<f:facet name="header">
<h:outputText value="#{bundleMovie.ListMovieTitle_movieId}"/>
</f:facet>
<h:outputText value="#{item.movieId}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{bundleMovie.ListMovieTitle_movieName}"/>
</f:facet>
<h:outputText value="#{item.movieName}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{bundleMovie.ListMovieTitle_movieGenre}"/>
</f:facet>
<h:outputText value="#{item.movieGenre}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{bundleMovie.ListMovieTitle_movieRating}"/>
</f:facet>
<h:outputText value="#{item.movieRating}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{bundleMovie.ListMovieTitle_movieDate}"/>
</f:facet>
<h:outputText value="#{item.movieDate}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value=" "/>
</f:facet>
<h:commandLink action="#{movieController.bookAMovie(movie)}" value="Book" />
</h:column>
</h:dataTable>
</h:panelGroup>
<br />
<h:link outcome="/faces/adminIndex.jsp" value="Return to home page"/>
<br />
<br />
</h:form>
</ui:define>
</ui:composition>
如您所见,方法<h:commandLink action="#{movieController.bookAMovie(movie)}" value="Book" />
应该将用户选择保存在新表中,该表为bookedmovie
,而表中的数据显示给用户movie
。 / p>
方法是:
public int bookAMovie(Movie movie) throws ClassNotFoundException {
String INSERT_USERS_SQL = "INSERT INTO bookedmovie"
+ " (bookedmoviename,bookedmoviegenre,bookedmovierating) VALUES "
+ " (?,?,?);";
int result = 0;
Class.forName("com.mysql.jdbc.Driver");
try (Connection connection = DriverManager
.getConnection("jdbc:mysql://localhost:3306/cs230projekat?useSSL=false","root","");
// Step 2:Create a statement using connection object
PreparedStatement preparedStatement = connection.prepareStatement(INSERT_USERS_SQL)) {
preparedStatement.setString(1,movie.getMovieName());
preparedStatement.setString(2,movie.getMovieGenre());
preparedStatement.setDouble(3,movie.getMovieRating());
System.out.println(preparedStatement);
// Step 3: Execute the query or update query
result = preparedStatement.executeUpdate();
} catch (SQLException e) {
// process sql exception
printSQLException(e);
}
return result;
}
我不知道该如何解决。不一定要这样,如果有人可以任何方式提供帮助,它就适合我。仅向用户显示了来自数据库的电影,用户可以选择一部电影,并且他的选择存储在新表中。
解决方法
关于Java代码,以下代码可以正常工作。 我能够运行它。
请确保已在项目中添加了适当的MySQL库,并确保 UserName/Password
应该正确。现在,您提供了空密码。
因为您没有提供任何错误堆栈。我无法对此发表评论。
class Sample3 {
public static void main(String[] args) throws ClassNotFoundException {
bookAMovie(Movie.builder().movieGenre("Comic").movieRating(8).movieName("Movie1").build());
}
public static int bookAMovie(Movie movie) throws ClassNotFoundException {
String INSERT_USERS_SQL = "INSERT INTO bookedmovie"
+ " (bookedmoviename,bookedmoviegenre,bookedmovierating) VALUES "
+ " (?,?,?);";
int result = 0;
Class.forName("com.mysql.jdbc.Driver");
try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/sample?useSSL=false","root","PASSWORD");
// Step 2:Create a statement using connection object
PreparedStatement preparedStatement = connection.prepareStatement(INSERT_USERS_SQL)) {
preparedStatement.setString(1,movie.getMovieName());
preparedStatement.setString(2,movie.getMovieGenre());
preparedStatement.setDouble(3,movie.getMovieRating());
System.out.println(preparedStatement);
// Step 3: Execute the query or update query
result = preparedStatement.executeUpdate();
Statement statement=connection.createStatement();
ResultSet resultSet=statement.executeQuery("SELECT * FROM sample.bookedmovie");
List<Map<String,String>> mapList = getList(resultSet);
System.out.println(mapList);
} catch (SQLException e) {
// process sql exception
e.printStackTrace();
}
return result;
}
public static List<Map<String,String>> getList(ResultSet resultSet) throws SQLException {
List<Map<String,String>> mapList = new ArrayList<>();
ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
int columnNumber = resultSetMetaData.getColumnCount();
while (resultSet.next()) {
Map<String,String> map = new HashMap<>();
int count = 1;
while (count <= columnNumber) {
String columnName = resultSetMetaData.getColumnName(count);
map.put(columnName,resultSet.getString(columnName));
count++;
}
mapList.add(map);
}
return mapList;
}
}
@Data
@Builder
class Movie {
public String movieName;
public String movieGenre;
public double movieRating;
}
在这里,我附上了Java运行的成功屏幕快照,并且在MySQL中也插入了相同的记录。在此处输入图片描述
MySQL
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。