簡體   English   中英

通過外鍵獲取JavaDB中的列數據

[英]Get column data in JavaDB via foreign key

開始:我在JSP / EJB(Java EE 8)中構建一個頁面,顯示2個表:1表示在數據庫中注冊的每個用戶的名稱和分數,另一個表示所有未決的岩石紙張的挑戰。 目前登錄用戶。

數據庫:到目前為止,我有2個表可以通過“ LOCALHOST。 ”前綴訪問:Usercredentials和Pending_Challenges。 兩者都是使用以下代碼創建的:

數據庫:JavaDB

Usercredentials:

CREATE TABLE USERCREDENTIALS (

    username varchar(10) primary key,
    password varchar(10) not null

);

是的,是的,我知道這些不是最好的領域,但我責備我的隊友! :)

Pending_Challenges:

CREATE TABLE PENDING_CHALLENGES (

    challenge_id integer primary key,
    from_user varchar(10) references Usercredentials(username),
    to_user varchar(10) references Usercredentials(username),

);

到目前為止,表格包含以下數據:

Username | Password | Score
---------------------------
tom      | tom      | 5
mo       | mo       | 2
jon      | jon      | 0

Challenge_ID | From_User | To_User
----------------------------------
1            | tom       | mo
2            | jon       | tom

我在名為ListUserServlet.java的文件中調用這些表,在那里運行2個查詢。 每一個都要創建一組不同的結果(下面的代碼為c),以便在兩個不同的表格中打印。

{... working Java code...}

    System.out.println("Creating EMF query for userList");
    String query = "SELECT U FROM Usercredentials U ORDER BY U.score DESC";
    List users = em.createQuery(query).getResultList();
    request.setAttribute("userList", users");

{... working Java code...}

在我的.jsp文件中然后顯示表,我得到以下內容(不介意ID標記,我們正在改變它):

<h3>Current rankings:</h3>

    <form id="challengeUserForm" action="ChallengeUser" method="POST">
    <table id="userListTable" border="3">
        <tr >
            <th>Username</th>
            <th>Challenge others</th>
            <th>Score</th>
        </tr>
        <c:forEach var="user" begin="0" items="${requestScope.userList}">
            <tr>
                <td>${user.username}&nbsp;&nbsp;</td>
                <td><input type="submit" id="${user.username}" value="Challenge!"></td>
                <td>${user.score}</td>
            </tr>
        </c:forEach>
    </table>

使用這種方法,我還設法通過使用以下方式打印出該表中當前持有的所有挑戰:

{... working Java code...}

    query = "SELECT P FROM PendingChallenges P";
    List chall = em.createQuery(query).getResultList();
    request.setAttribute("pendingList", chall);

{... working Java code...}

現在,使用相同的邏輯,這是我打印表格的方式:

<h3>Pending challenges:</h3>

<form id="acceptChallengeForm" action="AcceptChallenge" method="POST">
    <table id="pendingTable" border="3">
        <tr>
            <th>Username</th>
            <th>Accept challenge</th>
        </tr>
        <c:forEach var="pending" begin="0" items="${requestScope.pendingList}">
            <tr>
                <td>${pending.fromUser.username} &nbsp;&nbsp;</td>
                <td><input type="submit" id="${pending.fromUser.username} " value="Accept!"></td>
            </tr>
        </c:forEach>
    </table>
</form>

我需要從“from_user”列獲取不是當前登錄用戶的每一行(會話變量已經到位)。 我的簡單想法是在Pending查詢中包含一個“NOT LIKE”語句:

query = "SELECT P.fromUser FROM PendingChallenges P WHERE P.fromUser NOT LIKE '" + current_user + "'";

“current_user”是我提到的EJB會話字符串。

但是,每次運行它時,我都會收到錯誤,說“P.fromUser”不是字符串,“P.fromUser.username”不屬於“entity [Usercredentials]”之類或者類似關鍵字“LIKE” “尚未得到認可 - > SQLException錯誤代碼30000的內容。

我會讀到關於“SQL連接”的內容。

查詢應該是這樣的,以從用戶憑據表中獲取字段:

SELECT * FROM PendingChallenges P 
   INNER JOIN UserCredentials U ON P.fromUser = U.username
   WHERE P.fromUser != '" + current_user + "'"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM