Java和本地数据库

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)。

无论如何,任何援助将不胜感激。 我可以继续使用ActiveX开发(我知道它可以在系统上运行,我99%肯定他们会继续使用Internet Explorer,但是,想要一些灵活性)。

我不确定我是否理解你的要求,但我确实破译了一些关键点。 我建议的是,您可以在单个软件包 (例如JAR)中提供完整的工作应用程序,这些软件包不需要太多(如果有的话) 配置或管理服务器。

一些必备技能:

  • Java编程语言
  • JDBC,SQL
  • JSP和Servlets(用于Web层)

我正在尝试使用本地数据库来创建桌面样式应用程序[…]我想要一些Java帮助连接到真正的本地数据库(无法访问服务器技术)

数据存储

JDBC可以与任何具有JDBC驱动程序的数据库一起使用,该驱动程序不一定是“网络模式”下的数据库,也可以与嵌入式数据库一起使用。

以下是嵌入模式下 Derby的示例: 替代文字

当应用程序使用Embedded Derby JDBC驱动程序访问Derby数据库时,Derby引擎不会在单独的进程中运行,并且没有单独的数据库进程可以启动和关闭。 相反,Derby数据库引擎在与应用程序相同的Java虚拟机(JVM)内运行。 因此,Derby就像应用程序使用的任何其他jar文件一样成为应用程序的一部分。 图1描绘了这种嵌入式架构。

以下是一些100%的Java和可嵌入数据库:

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

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

http://hsqldb.org/

Web层

您还可以嵌入像Jetty这样的Web服务器。

Jetty的口号是“不要在Jetty中部署应用程序,在应用程序中部署Jetty”。 这意味着,作为将应用程序捆绑为要部署在Jetty中的标准WAR的替代方案,Jetty旨在成为一个软件组件,可以像任何POJO一样在Java程序中实例化和使用。

嵌入docker 。

请注意,您可以使用这种方式使用其他Web服务器。

好的,所以你需要从本地数据库提供JSON,对吗?

您不需要服务器,可以直接从本地计算机上提供网页(您只需指向localhost)

所以,基本上(我知道这不会完整,但我希望是一个好的开始)

你必须:

  • 安装servlet容器(Tomcat或Jetty),它们非常易于使用。
  • 创建一个servlet或JSP页面来显示数据(JSP也很简单)
  • 使用JDBC创建到本地数据库(如Derby)的连接
  • 使用库将数据转换为JSON

安装tomcat

(我将为UNIX描述,但它对于Windows是相同的)

从这里下载然后将文件解压缩到您喜欢的某个目录中(例如/ home / you /或C:\ Users \ you \)

打开终端并转到tomcat bin目录并输入将启动tomcat的catalina.sh run ,需要在系统上安装Java

http://localhost:8080打开浏览器

它应该如下所示:

tomcat运行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

应该是这样的:

你好,世界http://a.imageshack.us/img541/1162/capturadepantalla201007h.png

创建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(); %> 

并通过转到localhost:8080/your/Hello.jsp再次执行您的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); } %> :)  

请注意我们正在使用throw导​​入,最后,我们更改方法的调用以将结果放入javascript变量list

运行时,JSP页面将如下所示(您必须右键单击以查看HTML源代码,因此请参阅标记):

结果http://a.imageshack.us/img248/7637/capturadepantalla201007c.png

希望这个对你有帮助。 我试着让你变得非常简单。

重要事项上面的示例充满了不良做法,不要那样编码(例如,直接在tomcat webapps文件夹上创建Web应用程序,或直接从JSP页面执行SQL(更不用说,不关闭资源等)

主要想法是为您提供足够的信息以便入门。

有一些方法可以将它与eclipse集成,并使用SQL Visor(如SquirrelSQL客户端)来操作数据。

这应该很简单,我实际上下载了文件并在编写这个答案时创建了测试,所以它应该可以工作。

作为奥斯卡的后续……

这是一个简单的“输入SQL”JSP页面,使用JSTL(Java标准标记库)标记。

所有你需要做的工作都是在derby.jar库中。

从Apache下载tomcat。

从Apache下载derby

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"%>     SQL Fun   

Welcome to Derby SQL


Executing: ${param.sql}
${param.sql} Result = ${result} ${param.sql}

mkdir WEB-INF

采取以下措施并将其放在web.xml中

    index.jsp   

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中做所有事情是“最佳实践”吗? 没有。

它有用吗? 是。

这是实用的吗? 是。

您可以随时更改。

您可能想看一下Apache Derby 。 最近的JDK将其作为JavaDB包含在内。 在Windows上,您可以在ProgramFiles / Sun中找到它。