Java&本地数据库

时间:2010-07-14 04:56:04

标签: java database database-connection local

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,但是,想要一些灵活性)。

4 个答案:

答案 0 :(得分:17)

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

一些必备技能:

  • Java programming langauge
  • JDBC,SQL
  • JSP和Servlets(用于Web层)
  

我正在尝试利用当地人   数据库创建桌面样式   申请[...]   我想要一些Java帮助来连接   一个真正的本地数据库(无法访问   服务器技术)

数据存储

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

以下是embedded mode中Derby的示例: alt text

  

当应用程序访问Derby时   使用Embedded Derby JDBC的数据库   驱动程序,Derby引擎不运行   在一个单独的过程中,有   没有单独的数据库进程   启动和关闭。相反,   Derby数据库引擎在里面运行   与Java相同的Java虚拟机(JVM)   应用。因此,德比成为其中的一部分   应用程序就像其他任何一样   应用程序使用的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   你的申请“。这意味着什么   这是捆绑的替代方案   您的应用程序作为标准WAR来   Jetty部署在码头,是   旨在成为一个软件组件   可以在a中实例化和使用   Java程序就像任何POJO一样。

嵌入Jetty

请注意,您可以使用其他网络服务器。

答案 1 :(得分:5)

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

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

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

你必须:

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

安装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

再次执行你的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中找到它。