[英]Java & Local Databases
TL DR; 想要一些Java幫助連接到一個真正的本地數據庫(無法訪問服務器技術),或者如果你可以提供代碼,那將是有效的。 它所要做的就是查詢數據庫(MS Access,雖然可以更改),然后輸出一個JSON字符串。 有關更多特異性,請參閱EDIT2。
編輯:在任何人說JDBC之前; 我查看了教程(開始深入閱讀),但大部分內容似乎都面向服務器技術,我無法訪問。
編輯2:似乎到目前為止大多數答案都要求安裝某種我不幸不能做的(並且沒有提及,所以我道歉)。 然而,這是目前正在使用的,我想要一個類似於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可以與任何具有JDBC驅動程序的數據庫一起使用,該驅動程序不一定是“網絡模式”下的數據庫,也可以與嵌入式數據庫一起使用。
以下是嵌入模式下 Derby的示例:
當應用程序使用Embedded Derby JDBC驅動程序訪問Derby數據庫時,Derby引擎不會在單獨的進程中運行,並且沒有單獨的數據庫進程可以啟動和關閉。 相反,Derby數據庫引擎在與應用程序相同的Java虛擬機(JVM)內運行。 因此,Derby就像應用程序使用的任何其他jar文件一樣成為應用程序的一部分。 圖1描繪了這種嵌入式架構。
以下是一些100%的Java和可嵌入數據庫:
http://www.h2database.com/html/main.html
您還可以嵌入像Jetty這樣的Web服務器。
Jetty的口號是“不要在Jetty中部署應用程序,在應用程序中部署Jetty”。 這意味着,作為將應用程序捆綁為要在Jetty中部署的標准WAR的替代方案,Jetty旨在成為一個軟件組件,可以像任何POJO一樣在Java程序中實例化和使用。
嵌入碼頭 。
請注意,您可以使用這種方式使用其他Web服務器。
好的,所以你需要從本地數據庫提供JSON,對嗎?
您不需要服務器,可以直接從本地計算機上提供網頁(您只需指向localhost)
所以,基本上(我知道這不會完整,但我希望是一個好的開始)
你必須:
安裝tomcat
(我將為UNIX描述,但它對於Windows是相同的)
從這里下載然后將文件解壓縮到您喜歡的某個目錄中(例如/ home / you /或C:\\ Users \\ you \\)
打開終端並轉到tomcat bin
目錄並輸入將啟動tomcat的catalina.sh run
,需要在系統上安裝Java
在http://localhost:8080
打開瀏覽器
它應該如下所示:
創建一個JSP文件
接下來,轉到tomcat webapps
目錄,它應該包含以下文件夾:
ROOT/
docs/
examples/
host-manager/
manager/
創建一個新的,例如your
或者其他內部創建一個文件Hello.jsp
其中包含以下內容:
Hello.jsp
----------
Hello, world
然后在瀏覽器中打開: http://localhost:8080/your/Hello.jsp
應該是這樣的:
創建JDBC程序
接下來,在你的web應用your
創建目錄: 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
如果你執行兩次,系統會告訴你表已經存在:
沒關系,我們已經創建了表格。
使用庫輸出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>
標記):
希望這個對你有幫助。 我試着讓你變得非常簡單。
重要事項上面的示例充滿了不良做法,不要那樣編碼(例如,直接在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"%>
<!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中做所有事情是“最佳實踐”嗎? 沒有。
它有用嗎? 是。
這是實用的嗎? 是。
您可以隨時更改它。
您可能想看一下Apache Derby 。 最近的JDK將其作為JavaDB包含在內。 在Windows上,您可以在ProgramFiles / Sun中找到它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.