Java и локальные базы данных - PullRequest
9 голосов
/ 14 июля 2010

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

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

РЕДАКТИРОВАТЬ2: Кажется, что большинство ответов до сих пор требуют установкичто-то, чего я, к сожалению, не могу сделать (и не упомянул, поэтому извиняюсь).Тем не менее, это то, что используется в настоящее время, и я хотел бы, чтобы решение, подобное для Java, сделало бы его более совместимым с браузерами, а не только с HTA (ссылка: 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 ]

17 голосов
/ 14 июля 2010

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

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

  • Язык программирования Java
  • JDBC, SQL
  • JSP и сервлеты (для веб-уровня)

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

Datastore

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

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

Когда приложение обращается к Derby базы данных с использованием Embedded Derby JDBC водитель, двигатель Дерби не работает в отдельном процессе, и есть нет отдельных процессов базы данных для запустить и выключить. Вместо этого Дерби движок базы данных работает внутри та же виртуальная машина Java (JVM), что и приложение. Таким образом, Дерби становится частью приложение, как и любое другое JAR-файл, который использует приложение. Рисунок 1 изображает это встроенный архитектура.

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

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

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

http://hsqldb.org/

Веб-уровень

Вы также можете встроить веб-сервер, например Jetty .

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

Встраивание Причал .

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

5 голосов
/ 14 июля 2010

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

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

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

Вы должны:

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

Установить tomcat

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

Загрузите его отсюда , а затем разархивируйте файл в какой-то каталог, который вам нравится (например, / home / you / или C: \ Users \ you \)

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

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

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

Кот работает http://a.imageshack.us/img180/8414/capturadepantalla201007l.png

Создание файла JSP

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

ROOT/<br> docs/<br> examples/<br> host-manager/<br> manager/

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

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

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

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

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

Создание программы JDBC

Далее, в вашем веб-приложении 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();
%>

И снова выполните свой 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. Вы можете получить его от здесь

Запустить кота снова

Прокомментируйте код создания в 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>

Обратите внимание, что мы используем импорт броска, и в конце мы изменим вызов метода, чтобы поместить результат в переменную javascript list

При запуске страница JSP будет выглядеть следующим образом (вам нужно будет щелкнуть правой кнопкой мыши, чтобы увидеть исходный код HTML, поэтому посмотрите тег <script>):

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

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

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

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

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

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

3 голосов
/ 14 июля 2010

Как следствие Оскара ...

Вот простая страница JSP «Введите в SQL», использующая теги JSTL (Стандартная библиотека тегов Java).

Все, что вам нужно для выполнения этой работы, - это выбросить в библиотеку derby.jar.

Скачать кота из Apache.

Скачать дерби от Apache

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.

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

С помощью тегов JSTL и SQL вы можете делать все, что вам угодно, из прямой JSP.

Является ли "наилучшей практикой" все делать в JSP? Нет.

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

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

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

0 голосов
/ 14 июля 2010

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

...