我試圖做一個例子來寫一個文件使用Java小程序的數據庫記錄到文件中。但問題是運行applet後,我看到文件被創建,但它包含垃圾數據。
我已經簽署了我的小程序(以下本教程:http://www.narendranaidu.com/2007/11/3-easy-steps-to-self-sign-applet-jar.html)
我已經嘗試在創建的jar(SaveToFile.jar)中放入mysql連接器。但同樣的事情發生了。所以我很困惑,如果數據庫連接真的發生。
構建之後,我的項目結構如下所示(我在這裏只顯示了建造部分):MySQL的結果不正確寫入使用Java小程序
appletTest/
out/production/appletTest/
applet/SaveToFile.class
SaveToFile.html
SaveToFile.jar
mysql-connector-java-5.1.24-bin.jar
file-applet.jnlp
keystore
打開HTML文件到Firefox瀏覽器(Chrome不給任何迴應,別後不知道爲什麼!),並通過授予運行applet的權限,data.txt文件在該目錄中成功創建。
下面是Java代碼:
package applet;
public class SaveToFile extends Applet {
public void init() {
try {
getData();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
private void getData() throws SQLException, ClassNotFoundException, IllegalAccessException, InstantiationException {
String myDriver = "com.mysql.jdbc.Driver";
String dbUrl = "jdbc:mysql://localhost/APPLET?user=root&password=root&characterSet=utf8&useUnicode=true&characterEncoding=utf-8&characterSetResults=utf8";
Class.forName(myDriver);
Connection conn = DriverManager.getConnection(dbUrl);
Statement stmt = conn.createStatement();
try {
ResultSet rs = stmt.executeQuery("SELECT * FROM applet");
try {
String text = "";
while (rs.next()) {
text += rs.getString("title");
}
writeToFile(text);
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
rs.close();
} catch (Throwable ignore) {
ignore.printStackTrace();
}
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
stmt.close();
} catch (Throwable ignore) {
ignore.printStackTrace();
}
}
}
public void writeToFile (String text) {
try {
DataOutputStream dataOut = new DataOutputStream(new FileOutputStream("data.txt"));
dataOut.writeUTF(text);
dataOut.close();
} catch(Exception x) {
x.printStackTrace();
}
}
}
這裏是JNLP:
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="" href="">
<information>
<title>Write To File</title>
<vendor>Vendor</vendor>
</information>
<resources>
<!-- Application Resources -->
<j2se version="1.7+"
href="http://java.sun.com/products/autodl/j2se"
max-heap-size="128m"/>
<jar href="SaveToFile.jar" main="true"/>
</resources>
<applet-desc name="Test Applet"
main-class="applet.SaveToFile"
width="22"
height="22"/>
<update check="background"/>
<security>
<all-permissions/>
</security>
</jnlp>
下面是HTML:
<!DOCTYPE html>
<html>
<head>
<title>Applet Test</title>
</head>
<body>
<script src="http://java.com/js/deployJava.js"></script>
<script type="text/javascript">
var attributes = { code:'applet.SaveToFile', width:22, height:22} ;
var parameters = {jnlp_href: 'file-applet.jnlp'} ;
deployJava.runApplet(attributes, parameters, '1.7');
</script>
<applet
id="saveToFile"
width=22
height=22
code="applet.SaveToFile"
archive="SaveToFile.jar"
jnlp_href = 'file-applet.jnlp'
/>
</body>
</html>
最後這裏是MySQL表:
+----+--------+
| id | title |
+----+--------+
| 1 | TITLE1 |
| 2 | TITLE2 |
| 3 | TITLE3 |
| 4 | TITLE4 |
+----+--------+
即使我已經試過此查詢(以下這個:http://www.tech-recipes.com/rx/1475/save-mysql-query-results-into-a-text-or-csv-file/),但什麼都沒有發生此時:
SELECT * FROM applet
INTO OUTFILE 'tmp/data.txt'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
而且這將是有益的,如果任何人都可以給的東西固定在處理兩者之間的數據庫交互的一個例子JavaScript和小程序。
謝謝你
至於我可以告訴你,沒有描述實際問題。你甚至可以說_'the的data.txt文件被創建successfully'_ –
@MarkRotteveel:我說的是文件中包含它不應該有垃圾數據。 – leevi
定義垃圾(顯示它的一個樣本)。最後一個查詢將在服務器上創建文件,而不是在客戶端上創建。 –