如何使用JDBC轻松地将内容上传到Java中的MySql数据库?

如何使用JDBC轻松地将内容上传到Java中的MySql数据库?,java,mysql,jdbc,Java,Mysql,Jdbc,我是初学者,在Java和JDBC中使用MySql时遇到问题。 任何人都可以粘贴一行如何使用“SQL更新”的代码。 或者也许有人知道一些好的教程来学习它 我的代码有错误: try { conn = DriverManager.getConnection(CONN_STRING, USERNAME, PASSWORD); System.out.println("Connected!"); Stateme

我是初学者,在Java和JDBC中使用MySql时遇到问题。 任何人都可以粘贴一行如何使用“SQL更新”的代码。 或者也许有人知道一些好的教程来学习它

我的代码有错误:

                    try { 
        conn = DriverManager.getConnection(CONN_STRING, USERNAME,    PASSWORD); 
        System.out.println("Connected!");
        Statement st = conn.createStatement();
        String strUpdate = "UPDATE rozchody SET nazwa ='test' ";
        ResultSet ra = st.executeQuery(strUpdate);
        ResultSet rs = st.executeQuery("select * from rozchody");
        while(rs.next()){
            System.out.println("wyswietlam: ");
            String s = rs.getString("nazwa");
            System.out.println(s);
        }

    } catch (SQLException e) {
        System.err.println(e);
    } finally {
        if (conn != null) {
            conn.close();
        }
    }

要执行UPDATE/INSERT/CREATE语句,应该使用语句类的execute函数,而不是executeQuery

更正代码:

    conn = DriverManager.getConnection(CONN_STRING, USERNAME, PASSWORD); 
    System.out.println("Connected!");
    Statement st = conn.createStatement();
    String strUpdate = "UPDATE rozchody SET nazwa ='test' ";
    st.execute(strUpdate); // or use executeUpdate()

它将返回一个布尔值,您可以检查并继续。

当您要对SQL数据库执行更新、插入和删除操作时,您永远不会收到结果集。 使用executeUpdate而不是executeQuery。

一条语句只能打开一个ResultSet对象。您正在使用UPDATE和SELECT语句创建两个ResultSet对象

由于更新不会返回结果集,因此请使用st.executestrUpdate。然后,您可以从Rozzody检索带有st.executeQueryselect*的结果集

您的固定代码:

try { 
    conn = DriverManager.getConnection(CONN_STRING, USERNAME,    PASSWORD); 
    System.out.println("Connected!");
    Statement st = conn.createStatement();
    String strUpdate = "UPDATE rozchody SET nazwa ='test' ";

    //Change this
    st.execute(strUpdate);
    ResultSet rs = st.executeQuery("select * from rozchody");
    //Now you won't get an error opening a new ResultSet

    while(rs.next()){
        System.out.println("wyswietlam: ");
        String s = rs.getString("nazwa");
        System.out.println(s);
    }

} catch (SQLException e) {
    System.err.println(e);
} finally {
    if (conn != null) {
        conn.close();
    }
}
请注意,尽管上述方法可行,但通常最好使用PreparedStatements,而不是针对不同的执行重复使用语句。这将有助于防止SQL注入,一旦您对语句对象的工作方式有了更深入的了解,就应该仔细阅读它。

遵循这个示例,但本质上就是这样

String strUpdate = "UPDATE rozchody SET nazwa ='test'";
PreparedStatement preparedStatement = conn.prepareStatement(strUpdate);
// execute insert SQL stetement
preparedStatement.executeUpdate();

很高兴知道您复制了该博客中的代码并将其作为答案发布:。甚至没有尝试将其调整为OP的需要=\只是尝试为他保存一次单击。如果您确实尝试保存一次单击,请发布与问题相关的代码,不要只是复制/粘贴其他站点的代码并将其作为我们的传递。例如,OP的问题中没有DBUSER表。进行更改非常简单。绝对不会试图声称代码是我的。如果是这样的话,我很抱歉。那么,下次你发布一个不属于你的代码时,至少要感谢作者。我不明白为什么人们使用Java与数据库通信。任何人都可以轻松地对程序进行反编译,并获取用户名、密码等以使用数据库。因此,任何人都可以在数据库中删除任何内容。@Vallentin我猜您没有在实际应用程序中工作过,在这些应用程序中,数据库参数不是硬编码的,而是从可以保护的外部资源中检索的。使用加密的属性文件可以避免这种情况。为了便于讨论,您建议使用哪种语言?@LuiggiMendoza无论程序多么安全或加密,您都可以对其进行解密和反编译。我总是通过一个PHP文件从我的服务器进行数据库通信。我不确定你所说的真实世界的应用程序是什么意思,尽管我的Java程序包含数据库通信,正如我之前所说,我总是通过我服务器上的PHP文件来实现。@Vallentin你可以在应用服务器中配置存储数据库连接的组件,并保护它们,即使你反编译并查看所有这些组件源代码中没有任何数据库连接参数。当然,这是在实际应用中完成的。不知道你看到了什么。如果你使用PHP,这对你有好处,但是不要因为你不知道如何使用它而宣扬Java不是正确的工具。