2013-04-08 63 views
1

我試圖做一個例子來寫一個文件使用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和小程序。

謝謝你

+0

至於我可以告訴你,沒有描述實際問題。你甚至可以說_'the的data.txt文件被創建successfully'_ –

+0

@MarkRotteveel:我說的是文件中包含它不應該有垃圾數據。 – leevi

+0

定義垃圾(顯示它的一個樣本)。最後一個查詢將在服務器上創建文件,而不是在客戶端上創建。 –

回答

0

好的。我已經成功完成了這個問題。我已經提取使用mysql-connector,並把所有的提取文件與檔案罐子applet類文件,而現在MySQL數據檢索工作好一起。下面是我在窗口中使用的命令(建造部分下):

appletTest/ 
    out/production/appletTest/  

mkdir tmp 
cd tmp 
jar -xf ../mysql-connector-java-5.1.24-bin.jar 
cd.. 
jar -cvf SaveToFile.jar applet\SaveToFile.class -C tmp/ . 
rmdir tmp /S 

而且使用創建的jar文件的存檔做的事情與數據庫權。