Java И Локальные Базы Данных

TL DR; нужна помощь Java с подключением к действительно локальной базе данных (нет доступа к серверным технологиям ), или если вы можете взбить код, который будет работать. Все, что ему нужно сделать, это запросить БД ( MS Access, хотя его можно изменить) и вывести строку JSON. См. EDIT2 для большей конкретики.

EDIT: прежде чем кто-либо скажет JDBC; я просмотрел учебники ( начал читать подробно), но большинство из них, похоже, ориентированы на серверные технологии, к которым у меня нет доступа к.

EDIT2: кажется, большинство ответов до сих пор требуют какой-то установки, которую я, к сожалению, не могу сделать ( и не упомянул, поэтому прошу прощения ). Тем не менее, это то, что в настоящее время используется, и я хотел бы, чтобы решение, подобное Java, сделало бы его более кросс-браузерным, а не только HTA (link:https://launchpad.net/accessdb)

хорошо, для длинной версии. Я пытаюсь использовать локальную базу данных для создания приложение в стиле рабочего стола для работы (и, возможно, использовать знания для других проектов ). База данных, которую я могу создать без проблем (MS Access 2003, просто оказывается быстро доступной ). В настоящее время я использую сценарии ActiveX для работы с базой данных в HTML-приложении (*.HTA-файл работает только с Internet Explorer), я бы очень хотел сделать этот более кросс-браузер (в случае, если компания когда-либо переключится на фактический браузер), используя JAVA для доступа к базе данных, затем вывод результатов в JSON в локальную переменную JavaScript может вызывать и использовать.

честно говоря, скорее учебник типа информации, как я хочу на самом деле узнать, почему это работает, так что я могу позже изменить его в соответствии с моими потребностями. У меня установлен Eclipse, а также JDK, и я могу править небольшие программы на Java, поэтому не полностью мозг мертв ( но недалеко от :P ). Я работаю с JavaScript, поэтому я могу прочитать довольно много кода Java, как он стоит ( не тот же синтаксис, поскольку они не связано, но мало что я знаю о Java, я могу перевести обратно в JS без проблем ).

в любом случае, любая помощь будет высоко оценили. Я могу продолжить разработку с ActiveX (поскольку я знаю, что работает в системе, и я на 99% уверен, что они будут продолжать использовать Internet Explorer, но, хотелось бы некоторую гибкость ).

4 ответов


Я не уверен, что очень хорошо понял ваши требования, однако я расшифровал некоторые ключевые моменты. То, что я предлагаю, позволит вам доставить полное рабочее приложение в один пакет (скажем, банку), которая не потребует много (если таковые имеются) настройки или администрирования серверов.

некоторые необходимые навыки:

  • Java Программирование langauge
  • JDBC, SQL
  • JSP и сервлеты (для Интернета tier)

Я пытаюсь использовать местный база данных для создания стиля рабочего стола приложение.[ ..] Мне нужна помощь Java при подключении к действительно локальная база данных ( нет доступа к server tech)

хранилище

JDBC можно использовать с любой базой данных, которая имеет драйвер JDBC, который не обязательно является базой данных в "сетевом режиме", он также может использоваться со встроенными базами данных.

вот пример с Derby в встроенный режим: alt text

когда приложение обращается к дерби база данных с использованием встроенного Derby JDBC водитель, двигатель дерби не работает в отдельном процессе, и есть нет отдельных процессов базы данных для запуск и выключение. Вместо этого Derby Database engine работает внутри та же виртуальная машина Java (JVM), что и приложение. Итак, дерби становится частью приложение, как и любое другое jar-файл, что приложение использует. На рис. 1 показано это встроенное архитектура.

вот некоторые 100% Java и встраиваемые базы данных:

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

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

http://hsqldb.org/

веб-уровня

вы также можете встроить веб-сервер, как причал.

Jetty имеет лозунг "Не развернуть приложение в Jetty, развернуть пристани в ваше приложение." Это значит, что это как альтернатива связыванию ваше приложение в качестве стандартной войны быть развернутым на причале, причал предназначен для программного компонента который можно создать и использовать в a Java-программа, как и любая POJO.

вложение причал.

обратите внимание, что есть другие веб-серверы, которые можно использовать таким образом.


хорошо, значит, вам нужно обслуживать JSON из локальной базы данных, верно?

вам не нужен сервер, вы можете обслуживать веб-страницы непосредственно с вашего локального компьютера ( вам просто нужно указать localhost )

Итак, в основном (и я знаю, что это не будет полным, но я надеюсь, что это хорошее начало )

вы должны:

  • установить контейнер сервлетов ( Tomcat или Jetty ), они очень просты в использовании.
  • создать страницу сервлета или JSP для отображения данных (JSP также легко )
  • создайте соединение с помощью JDBC с локальной базой данных, такой как Derby
  • используйте библиотеку для преобразования данных в JSON

установить tomcat

(я опишу для UNIX, но это то же самое для Windows)

скачать тут а затем распакуйте файл в какой-нибудь каталог, который вам нравится ( например. / главная/вы / или C:\Users\you\ )

откройте терминал и перейдите к tomcat bin - каталог и типа catalina.sh run это запустит tomcat, вам нужно установить Java в вашей системе

откройте браузер в http://localhost:8080

это должно выглядеть так:

запуск tomcat http://a.imageshack.us/img180/8414/capturadepantalla201007l.png

создать файл JSP

далее, перейти к tomcat , он должен содержать следующие папки:

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

создайте новый, например your или что-то еще и внутри создайте файл Hello.jsp следующим образом:

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

а затем откройте в своем браузере:http://localhost:8080/your/Hello.jsp

должен выглядеть так:

Привет, мир http://a.imageshack.us/img541/1162/capturadepantalla201007h.png

создать программу JDBC

далее в webapp your создать папку: WEB-INF/lib и сохраните там драйвер derby JDBC, вы можете получить его от здесь

измените свой привет.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();
%>

и снова выполните jsp, перейдя в localhost:8080/your/Hello.jsp

если вы выполните его дважды, система сообщит вам, что таблица уже существует:

казнить его дважды http://a.imageshack.us/img707/7960/capturadepantalla201007v.png

это нормально, мы уже создали таблицу.

используйте библиотеку для вывода 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> tag):

результат http://a.imageshack.us/img248/7637/capturadepantalla201007c.png

я надеюсь, что вы найти это полезным. Я старался сделать это предельно простым для тебя.

важно в приведенном выше примере полно плохих практик, не используйте такой код ( например, создание веб-приложений непосредственно в папке tomcat webapps или выполнение SQL непосредственно со страницы JSP ( не говоря уже о закрытии ресурсов и т. д. )

основная идея была в том, чтобы дать вам достаточно информации, чтобы начать работу.

есть способы интегрировать это с eclipse и использовать SQL-козырек, такой как клиент SquirrelSQL для управления данными.

это должно быть достаточно просто, я фактически загрузил файлы и создал тест во время написания этого ответа, поэтому он должен работать.


как продолжение Оскара...

вот простой "тип в SQL" JSP-странице, используя теги JSTL (Java Standard Tag Library).

все, что вам нужно, чтобы сделать эту работу, это бросить в дерби.библиотека jar.

скачать tomcat с Apache.

скачать derby с Apache

cd $TOMCAT_HOME/webapps

mkdir yourapp

cd yourapp

возьмите следующее и поместите его в индекс.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

возьмите следующее и поместите его в сеть.в 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-страница $Файле/веб-приложений/yourapp/веб-инф/веб.XML $ TOMCAT_HOME/webapps/yourapp/WEB-INF/lib / derby.Джар

теперь запустите Tomcat и укажите браузер на http://localhost:8080/yourapp

и вы получите это маленькое поле для ввода SQL.

Derby создаст БД для вас автоматически.

с тегами JSTL и SQL вы можете делать все, что хотите от прямого JSP.

это "лучшая практика", чтобы сделать все в JSP? Нет.

это работает? Да.

это практично? Да.

вы всегда можете изменить его позже.


возможно, вы захотите взглянуть на Apache Derby. Последние JDKs включают его как JavaDB. В Windows вы найдете его в ProgramFiles / Sun.