TL DR;想要一些Java帮助连接到一个真正的本地数据库(无法访问服务器技术),或者如果你可以提供代码,那将是有效的。它所要做的就是查询数据库(MS Access,虽然可以更改),然后输出一个JSON字符串。有关更多特异性,请参阅EDIT2。
编辑:在有人说JDBC之前;我查看了教程(开始深入阅读),但大部分内容似乎都面向服务器技术,我无法访问。
EDIT2:到目前为止,大多数答案都需要安装某种我不幸无法做到的安装(并没有提及,所以我道歉)。然而,这是目前正在使用的,我想要一个类似于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)。 / p>
无论如何,我们将非常感谢任何协助。我可以继续使用ActiveX进行开发(因为我知道它可以在系统上运行,我99%肯定他们会继续使用Internet Explorer,但是,想要一些灵活性)。
答案 0 :(得分:17)
我不确定我是否理解你的要求,但我确实破译了一些关键点。我建议的是,您可以在单一软件包(例如JAR)中提供完整的工作应用程序,该服务器不需要太多(如果有的话)配置或管理。
一些必备技能:
我正在尝试利用当地人 数据库创建桌面样式 申请[...] 我想要一些Java帮助来连接 一个真正的本地数据库(无法访问 服务器技术)
JDBC可以与任何具有JDBC驱动程序的数据库一起使用,该驱动程序不一定是“网络模式”下的数据库,也可以与嵌入式数据库一起使用。
以下是embedded mode中Derby的示例:
当应用程序访问Derby时 使用Embedded Derby JDBC的数据库 驱动程序,Derby引擎不运行 在一个单独的过程中,有 没有单独的数据库进程 启动和关闭。相反, Derby数据库引擎在里面运行 与Java相同的Java虚拟机(JVM) 应用。因此,德比成为其中的一部分 应用程序就像其他任何一样 应用程序使用的jar文件。 图1描绘了这种嵌入式 架构。
以下是一些100%的Java和可嵌入数据库:
http://www.h2database.com/html/main.html
您还可以嵌入像Jetty这样的Web服务器。
Jetty的口号是“不要部署你的 在Jetty中应用,部署Jetty 你的申请“。这意味着什么 这是捆绑的替代方案 您的应用程序作为标准WAR来 Jetty部署在码头,是 旨在成为一个软件组件 可以在a中实例化和使用 Java程序就像任何POJO一样。
嵌入Jetty。
请注意,您可以使用其他网络服务器。
答案 1 :(得分:5)
好的,所以你需要从本地数据库提供JSON,对吗?
您不需要服务器,您可以直接从本地计算机上提供网页(您只需指向localhost)
所以,基本上(我知道这不会完整,但我希望这是一个好的开始)
你必须:
安装tomcat
(我将针对UNIX进行描述,但对Windows来说也是如此)
Download it from here然后将文件解压缩到您喜欢的某个目录中(例如/ home / you /或C:\ Users \ you \)
打开终端并转到tomcat bin
目录并键入将启动tomcat的catalina.sh run
,您需要在系统上安装Java
在http://localhost:8080
它应该是这样的:
tomcat running http://a.imageshack.us/img180/8414/capturadepantalla201007l.png
创建JSP文件
接下来,转到tomcat webapps
目录,它应包含以下文件夹:
ROOT/
docs/
examples/
host-manager/
manager/
创建一个新的,例如your
或其他内容,并使用以下内容创建文件Hello.jsp
:
Hello.jsp
----------
Hello, world
然后在浏览器中打开:http://localhost:8080/your/Hello.jsp
应该是这样的:
hello, world http://a.imageshack.us/img541/1162/capturadepantalla201007h.png
创建JDBC程序
接下来,在您的webapp your
中创建目录:WEB-INF/lib
并保存derby JDBC驱动程序,您可以从here获取它
修改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
如果你执行两次,系统会告诉你表已经存在:
Execute it twice http://a.imageshack.us/img707/7960/capturadepantalla201007v.png
没关系,我们已经创建了这个表。
使用库输出JSON
shudown tomcat,但按下contrl-c
下载并复制到您的WEB-INF / lib目录中的json-simple jar。您可以从here
获取再次启动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>
标记):
result http://a.imageshack.us/img248/7637/capturadepantalla201007c.png
我希望你觉得这很有用。我试着让你变得非常简单。
重要上面的示例充满了不良做法,不要那样编码(例如,直接在tomcat webapps文件夹上创建Web应用程序,或直接从JSP页面执行SQL(更不用说) ,而不是关闭资源等。)
主要想法是为您提供足够的信息以便开始使用。
有一些方法可以将它与eclipse集成,并使用SQL Visor(如SquirrelSQL客户端)来操作数据。
这应该很简单,我实际上在编写这个答案时下载了文件并创建了测试,所以它应该可以工作。
答案 2 :(得分:3)
作为奥斯卡的后续行动......
这是一个简单的“在SQL中键入”JSP页面,使用JSTL(Java标准标记库)标记。
所有你需要做的工作都是在derby.jar库中投入。
从Apache下载tomcat。
从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 / web应用/ yourapp / index.jsp的 $ TOMCAT_HOME / webapps /目录yourapp / WEB-INF / web.xml文件 $ TOMCAT_HOME / web应用/ yourapp / WEB-INF / LIB /的derby.jar
现在启动Tomcat,并将浏览器指向http://localhost:8080/yourapp
你会得到这个小方框来输入SQL。
Derby将自动为您创建数据库。
使用JSTL和SQL标记,您可以直接从JSP中完成所有操作。
在JSP中做所有事情是“最佳实践”吗?否。
有用吗?是。
实用吗?是。
您可以随时更改。
答案 3 :(得分:0)
您可能需要查看Apache Derby。最近的JDK将其作为JavaDB包含在内。在Windows上,您可以在ProgramFiles / Sun中找到它。