Java и Локальные базы данных

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

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

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

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

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

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

10
задан Akidi 14 July 2010 в 08:14
поделиться

4 ответа

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

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

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

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

Datastore

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

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

Когда приложение обращается к Дерби база данных с использованием Embedded Derby JDBC водитель, двигатель Дерби не работает в отдельном процессе, и есть нет отдельных процессов базы данных для запускать и выключать. Вместо этого Ядро базы данных Derby работает внутри та же виртуальная машина 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 для будет развернут в Jetty, Jetty разработан как программный компонент который можно создать и использовать в Программа на Java, как и любой POJO.

Встраивание Jetty .

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

18
ответ дан 3 December 2019 в 16:08
поделиться

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

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

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

Скачайте tomcat с сайта Apache.

Скачайте derby с 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.

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

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

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

Работает ли это? Да.

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

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

3
ответ дан 3 December 2019 в 16:08
поделиться

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

0
ответ дан 3 December 2019 в 16:08
поделиться

Итак, вам нужно обслуживать 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

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

tomcat running

Создайте JSP файл

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

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

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

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

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

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

hello, world

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

Далее, в вашем webapp вашем создайте директорию: 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

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

Execute it twice

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

Использование библиотеки для вывода JSON

Выключите tomcat, но нажмите contrl-c

Скачайте и скопируйте в каталог WEB-INF/lib jar json-simple. Вы можете получить его из здесь

Запустите 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, поэтому посмотрите тег