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 в встроенный режим:
когда приложение обращается к дерби база данных с использованием встроенного Derby JDBC водитель, двигатель дерби не работает в отдельном процессе, и есть нет отдельных процессов базы данных для запуск и выключение. Вместо этого Derby Database engine работает внутри та же виртуальная машина Java (JVM), что и приложение. Итак, дерби становится частью приложение, как и любое другое jar-файл, что приложение использует. На рис. 1 показано это встроенное архитектура.
вот некоторые 100% Java и встраиваемые базы данных:
http://www.h2database.com/html/main.html
веб-уровня
вы также можете встроить веб-сервер, как причал.
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.