首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未使用java小程序将mysql结果正确写入文件

问未使用java小程序将mysql结果正确写入文件
EN

Stack Overflow用户
提问于 2013-04-09 00:52:42
回答 1查看 281关注 0票数 1

我正在尝试做一个例子,使用java applet将数据库记录写到文件中。但问题是,在运行applet之后,我看到文件被创建了,但它包含垃圾数据。

我已经签署了我的小程序(遵循本教程:http://www.narendranaidu.com/2007/11/3-easy-steps-to-self-sign-applet-jar.html)

我已经尝试将mysql-connector放入创建的jar(SaveToFile.jar)中。但同样的事情也发生了。所以我很困惑数据库连接是否真的发生了。

在构建之后,我的项目结构如下所示(这里我只展示了构建的部分):

代码语言:javascript
复制
appletTest/
    out/production/appletTest/
                             applet/SaveToFile.class
                             SaveToFile.html
                             SaveToFile.jar
                             mysql-connector-java-5.1.24-bin.jar
                             file-applet.jnlp
                             keystore

在Firefox浏览器中打开html文件后(chrome没有任何响应,不知道为什么!)并通过授予applet运行的权限,在同一目录下成功创建data.txt文件。

下面是Java代码:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<?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:

代码语言:javascript
复制
<!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表:

代码语言:javascript
复制
+----+--------+
| 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/),但这次什么也没有发生:

代码语言:javascript
复制
SELECT * FROM applet
INTO OUTFILE 'tmp/data.txt'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'

此外,如果任何人能给出一个在处理javascript和applet之间的数据库交互时的安全问题的例子,将会很有帮助。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-09 14:54:07

好的。我已经成功地解决了这个问题。我已经提取了mysql-connector,并将所有这些提取的文件和applet类文件放在归档jar中,mysql数据检索现在工作正常。下面是我在windows中使用的命令(在构建的部分下):

代码语言:javascript
复制
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文件作为归档可以正确地处理数据库。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15884689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档