0

日食を介してMySQLデータベースにデータを入力しようとしています。これが私がこれまでに持っているものです:

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.PreparedStatement;
import com.mysql.jdbc.Statement;

public class MySQL{

public static void main(String[] args)throws Exception{

    Class.forName("com.mysql.jdbc.Driver");

    Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/database","root","root");

    PreparedStatement stmt = con.prepareStatement("INSERT INTO 'database'.'Table'(Account_ID,First_Name,Last_Name) VALUES ('hello12','Ed','Lee')");

    ResultSet result = stmt.executeQuery();}

 }

何らかの理由で機能しません...何かアイデアはありますか?

4

4 に答える 4

0

コミットしてみましたか?

con.commit();

于 2012-08-10T03:27:21.033 に答える
0

他の人が示唆しているように、SQL ステートメントで行った変更をコミットする必要があります。これがどのように見えるかです:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class MySQL{

    public static void main(String[] args) throws Exception {
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = null;
        PreparedStatement stmt = null;
        try {
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/database", "root", "root");
            stmt = con.prepareStatement("INSERT INTO 'database'.'Table'(Account_ID,First_Name,Last_Name) VALUES (?,?,?)");
            stmt.setString(1, "hello12");
            stmt.setString(2, "Ed");
            stmt.setString(3, "Lee");
            stmt.executeUpdate();
            conn.commit();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (stmt != null) {
                try {
                   stmt.close();
                } catch (SQLException ex) {
                }
            }
            if (con != null) {
                try {
                   con.close();                    
                } catch (SQLException ex) {
                }
            }
        }
    }
}

変更された注意事項をインポートします。

  • try ブロックの前に変数を宣言して、finally ブロックでアクセスできるようにしますが、例外がスローされた場合に備えて、try ブロック内で変数を初期化します。
  • は、新しい値をハード コードするのではなく、構文にPreparedStatement置き換えます。?実際のアプリケーションでは、それらが渡されることになり、文字列の連結だけを行うと、SQL インジェクションやその他の問題にさらされることになります。
  • finally ブロックは、例外がスローされたかどうかに関係なく、すべてのリソースを解放するために使用されます。したがって、接続と準備済みステートメントを作成するとしますが、それを実行するとエラーがスローされます。finally ブロック内のコードは引き続き実行され、ステートメントと接続が閉じられ、それらのリソースが解放されます。
于 2012-08-10T19:44:57.970 に答える
0

コードを次のように変更します。

    public class MySQL{
          public static void main(String[] args)throws Exception{
              Class.forName("com.mysql.jdbc.Driver");
              try{
                  Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/database","root","root");
                   PreparedStatement stmt = con.prepareStatement("INSERT INTO 'database'.'Table'(Account_ID,First_Name,Last_Name) VALUES (?,?,?)");
                   stmt.setString(1, "hello12");
                   stmt.setString(2, "Ed");
                   stmt.setString(3, "Lee");
                   stmt.executeUpdate();
              } catch (Exception e) {
                   e.printStackTrace();
              } finally {
                   stmt.close();
                   con.close();
              }
          }

     }
于 2012-08-10T04:36:51.587 に答える