簡體   English   中英

Java和本地數據庫

[英]Java & Local Databases

TL DR; 想要一些Java幫助連接到一個真正的本地數據庫(無法訪問服務器技術),或者如果你可以提供代碼,那將是有效的。 它所要做的就是查詢數據庫(MS Access,雖然可以更改),然后輸出一個JSON字符串。 有關更多特異性,請參閱EDIT2。

編輯:在任何人說JDBC之前; 我查看了教程(開始深入閱讀),但大部分內容似乎都面向服務器技術,我無法訪問。

編輯2:似乎到目前為止大多數答案都要求安裝某種我不幸不能做的(並且沒有提及,所以我道歉)。 然而,這是目前正在使用的,我想要一個類似於Java的解決方案,使其更具跨瀏覽器兼容性,而不僅僅是HTA(鏈接: https//launchpad.net/accessdb

好的,對於長版本。 我正在嘗試使用本地數據庫來創建桌面樣式的應用程序(並可能利用其他項目的知識)。 我可以創建沒有問題的數據庫(MS Access 2003,恰好可以快速獲得)。 目前我正在使用ActiveX腳本來處理HTML應用程序中的數據庫(* .HTA文件僅適用於Internet Explorer),我真的想讓這個更多的跨瀏覽器(如果公司EVER切換到實際的瀏覽器)通過使用JAVA訪問數據庫,然后將結果輸出JSON到局部變量JavaScript可以調用並使用。

老實說,寧願選擇教程類型信息,因為我想真正了解為什么這樣做有效,所以我可以稍后修改它以滿足我的需要。 我安裝了Eclipse以及JDK,並且可以使用Java編寫小程序,因此不會完全死掉腦子(但距離P不遠)。 我一直在使用JavaScript,所以我可以閱讀相當多的Java代碼(不同的語法,因為它們不相關,但我知道Java的一點點,我可以毫無問題地轉換回JS)。

無論如何,任何援助將不勝感激。 我可以繼續用ActiveX開發(據我所知,它可以在系統上運行,我99%肯定他們會繼續使用Internet Explorer,但是,想要一些靈活性)。

我不確定我是否理解你的要求,但我確實破譯了一些關鍵點。 我建議的是,您可以在單個軟件包 (例如JAR)中提供完整的工作應用程序,這些軟件包不需要太多(如果有的話) 配置或管理服務器。

一些必備技能:

  • Java編程語言
  • JDBC,SQL
  • JSP和Servlets(用於Web層)

我正在嘗試使用本地數據庫來創建桌面樣式應用程序[...]我想要一些Java幫助連接到真正的本地數據庫(無法訪問服務器技術)

數據存儲

JDBC可以與任何具有JDBC驅動程序的數據庫一起使用,該驅動程序不一定是“網絡模式”下的數據庫,也可以與嵌入式數據庫一起使用。

以下是嵌入模式下 Derby的示例: 替代文字

當應用程序使用Embedded Derby JDBC驅動程序訪問Derby數據庫時,Derby引擎不會在單獨的進程中運行,並且沒有單獨的數據庫進程可以啟動和關閉。 相反,Derby數據庫引擎在與應用程序相同的Java虛擬機(JVM)內運行。 因此,Derby就像應用程序使用的任何其他jar文件一樣成為應用程序的一部分。 圖1描繪了這種嵌入式架構。

以下是一些100%的Java和可嵌入數據庫:

http://www.h2database.com/html/main.html

http://db.apache.org/derby/

http://hsqldb.org/

Web層

您還可以嵌入像Jetty這樣的Web服務器。

Jetty的口號是“不要在Jetty中部署應用程序,在應用程序中部署Jetty”。 這意味着,作為將應用程序捆綁為要在Jetty中部署的標准WAR的替代方案,Jetty旨在成為一個軟件組件,可以像任何POJO一樣在Java程序中實例化和使用。

嵌入碼頭

請注意,您可以使用這種方式使用其他Web服務器。

好的,所以你需要從本地數據庫提供JSON,對嗎?

您不需要服務器,可以直接從本地計算機上提供網頁(您只需指向localhost)

所以,基本上(我知道這不會完整,但我希望是一個好的開始)

你必須:

  • 安裝servlet容器(Tomcat或Jetty),它們非常易於使用。
  • 創建一個servlet或JSP頁面來顯示數據(JSP也很簡單)
  • 使用JDBC創建到本地數據庫(如Derby)的連接
  • 使用庫將數據轉換為JSON

安裝tomcat

(我將為UNIX描述,但它對於Windows是相同的)

從這里下載然后將文件解壓縮到您喜歡的某個目錄中(例如/ home / you /或C:\\ Users \\ you \\)

打開終端並轉到tomcat bin目錄並輸入將啟動tomcat的catalina.sh run ,需要在系統上安裝Java

http://localhost:8080打開瀏覽器

它應該如下所示:

tomcat正在運行

創建一個JSP文件

接下來,轉到tomcat webapps目錄,它應該包含以下文件夾:

ROOT/
docs/
examples/
host-manager/
manager/

創建一個新的,例如your或者其他內部創建一個文件Hello.jsp其中包含以下內容:

Hello.jsp
----------
Hello, world

然后在瀏覽器中打開: http://localhost:8080/your/Hello.jsp

應該是這樣的:

你好,世界

創建JDBC程序

接下來,在你的web應用your創建目錄: WEB-INF/lib ,並保存有Derby JDBC驅動程序,你可以從它這里

修改Hello.jsp文件以創建如下樣本表:

<%@page import="java.sql.*, java.util.*"%>
<%!
     public String getData() {
         List list = new ArrayList();
         try {
             Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
             Connection connection = DriverManager.getConnection("jdbc:derby:yourdb;create=true");
             // The first time:
             PreparedStatement pstmt = connection.prepareStatement(
                 "CREATE TABLE PEOPLE\n"+
                 "(PERSON_ID INT NOT NULL GENERATED ALWAYS AS IDENTITY\n"+
                 "    CONSTRAINT PEOPLE_PK PRIMARY KEY, PERSON VARCHAR(26))");
            pstmt.executeUpdate();
            pstmt = connection.prepareStatement("INSERT INTO PEOPLE(PERSON) VALUES('OSCAR')");
            pstmt.executeUpdate();
         } catch( Exception e ) { 
             throw new RuntimeException( e );
         }
         return "";
     }
%>
:)
<%
    getData();
%>

並通過轉到localhost:8080/your/Hello.jsp再次執行您的jsp

如果你執行兩次,系統會告訴你表已經存在:

執行兩次

沒關系,我們已經創建了表格。

使用庫輸出JSON

Shudown tomcat,但是按下contrl-c

下載並復制到您的WEB-INF / lib目錄中的json-simple jar。 你可以從這里得到它

再次啟動tomcat

在JSP中注釋創建代碼並將其替換為SQL查詢,如下所示:

<%@page import="java.sql.*, java.util.*, org.json.simple.JSONValue"%>

<%!
     public String getData() {
         List list = new ArrayList();
         Connection connection = null;
         try {
             Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
              connection = DriverManager.getConnection("jdbc:derby:yourdb;create=true");
             // The first time:
             //PreparedStatement pstmt = connection.prepareStatement(
             //    "CREATE TABLE PEOPLE\n"+
             //    "(PERSON_ID INT NOT NULL GENERATED ALWAYS AS IDENTITY\n"+
             //    "    CONSTRAINT PEOPLE_PK PRIMARY KEY, PERSON VARCHAR(26))");
            //pstmt.executeUpdate();
            //pstmt = connection.prepareStatement("INSERT INTO PEOPLE(PERSON) VALUES('OSCAR')");
            //pstmt.executeUpdate();
            // execute select the second time
            PreparedStatement psmt = connection.prepareStatement("SELECT person FROM PEOPLE");
            ResultSet rs = psmt.executeQuery();
            while( rs.next() ){
                list.add( rs.getString("person"));
            }
         } catch( Exception e ) { 
             throw new RuntimeException( e );
         } finally {
             if( connection != null ) try {
                 connection.close();
             } catch( Exception e ){}
         }
         return JSONValue.toJSONString(list);
     }
%>
:)
<script>
 var list = <%=
    getData()
%>
</script>

注意我們正在使用throw導​​入,最后,我們更改方法的調用以將結果放入javascript變量list

運行時,JSP頁面將如下所示(您必須右鍵單擊以查看HTML源代碼,因此請參閱<script>標記):

結果

希望這個對你有幫助。 我試着讓你變得非常簡單。

重要事項上面的示例充滿了不良做法,不要那樣編碼(例如,直接在tomcat webapps文件夾上創建Web應用程序,或直接從JSP頁面執行SQL(更不用說,不關閉資源等)

主要想法是為您提供足夠的信息以便開始使用。

有一些方法可以將它與eclipse集成,並使用SQL Visor(如SquirrelSQL客戶端)來操作數據。

這應該很簡單,我實際上下載了文件並在編寫這個答案時創建了測試,所以它應該可以工作。

作為奧斯卡的后續......

這是一個簡單的“輸入SQL”JSP頁面,使用JSTL(Java標准標記庫)標記。

所有你需要做的工作是在derby.jar庫中拋出。

從Apache下載tomcat。

從Apache下載derby

cd $TOMCAT_HOME/webapps

mkdir yourapp

cd yourapp

取以下內容並將其放在index.jsp中:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>SQL Fun</title>
    </head>
    <body>
        <h1>Welcome to Derby SQL</h1>
        <!-- Form to prompt for SQL -->
        <form action="index.jsp" method="POST">
            <label for="sql">SQL Text:</label>
            <textarea cols="40" rows="10" name="sql"></textarea>
            <br/>
            <!-- click Execute query to execute a SELECT statement -->
            <input type="submit" name="doquery" value="Execute Query"/>
            <!-- click Execute DDL to execute a CREATE, UPDATE, DROP or DELETE statement -->
            <input type="submit" name="doddl" value="Execute DDL"/>
        </form>
        <c:if test="${!empty param.sql}">
            <!-- param is the default variable with the request parameters -->
            Executing: ${param.sql}
            <br/>
            <!-- This sets up the DB Connection to derby -->
            <sql:setDataSource driver="org.apache.derby.jdbc.EmbeddedDriver"
                url="jdbc:derby:derbyDB;create=true" scope="request"/>

            <c:choose>
                <c:when test="${!empty param.doddl}">
                    <sql:update var="result">
                    ${param.sql}
                    </sql:update>
                    Result = ${result}
                </c:when>
                <c:otherwise>
                    <sql:query var="result">
                    ${param.sql}
                    </sql:query>

                    <table border="1">
                        <!-- column headers -->
                        <tr>
                            <c:forEach var="columnName" items="${result.columnNames}">
                                <th><c:out value="${columnName}"/></th>
                            </c:forEach>
                        </tr>
                        <!-- column data -->
                        <c:forEach var="row" items="${result.rowsByIndex}">
                            <tr>
                                <c:forEach var="column" items="${row}">
                                    <td><c:out value="${column}"/></td>
                                </c:forEach>
                            </tr>
                        </c:forEach>
                    </table>
                </c:otherwise>
            </c:choose>
        </c:if>
    </body>
</html>

mkdir WEB-INF

采取以下措施並將其放在web.xml中

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

mkdir WEB-INF/lib

derby.jar復制到WEB-INF/lib

你現在應該有3個文件:

$ TOMCAT_HOME / webapps / yourapp / index.jsp $ TOMCAT_HOME / webapps / yourapp / WEB-INF / web.xml $ TOMCAT_HOME / webapps / yourapp / WEB-INF / lib / derby.jar

現在啟動Tomcat,並將瀏覽器指向http://localhost:8080/yourapp

你會得到這個小盒子來輸入SQL。

Derby將自動為您創建數據庫。

使用JSTL和SQL標記,您可以從直接JSP中執行所有操作。

在JSP中做所有事情是“最佳實踐”嗎? 沒有。

它有用嗎? 是。

這是實用的嗎? 是。

您可以隨時更改它。

您可能想看一下Apache Derby 最近的JDK將其作為JavaDB包含在內。 在Windows上,您可以在ProgramFiles / Sun中找到它。

暫無
暫無

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

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