1

私は Java の初心者で、db に行を挿入しようとしています。これはJavaで初めて挿入操作を実行しています。約2時間、私はグーグルでイライラしていて、エラーを解決できませんでした。友人に電話したところ、彼はチーム ビューアでライブ サポートを提供し、コードを 1 行だけプログラムに追加してくれました。

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

接続文字列の前にコードにこれを含める必要がある理由を誰か説明してください。毎回そこにコードを配置する必要がありますか。詳しく教えてください。

4

4 に答える 4

1

以下は、ドライバーの初期化がどのように機能するかを示す非常に単純化されたコードです。3 つのクラスがあります。それぞれを適切な名前のファイルに入れてください。

import java.util.HashMap;
import java.util.Map;

public class DriverMgr {
    private static final Map<String, Class<?>> DRIVER_MAP = new HashMap<String, Class<?>>();

    public static void registerDriver(final String name, final Class<?> cls) {
        DRIVER_MAP.put(name, cls);
    }

    public static Object getDriver(final String name) {
        final Class<?> cls = DRIVER_MAP.get(name);
        if (cls == null) {
            throw new RuntimeException("Driver for " + name + " not found");
        }
        try {
            return cls.newInstance();
        } catch (Exception e) {
            throw new RuntimeException("Driver instantiation failed", e);
        }
    }
}

public class MysqlDriver {
    static {
        // hello, I am a static initializer
        DriverMgr.registerDriver("mysql", MysqlDriver.class);
    }

    @Override
    public String toString() {
        return "I am the mysql driver";
    }
}

public class TestProg {
    public static void main(final String... args) {
        try {
            Class.forName("MysqlDriver"); // try with or without this
        } catch (Exception e) {
            throw new RuntimeException("Oops, failed to initialize the driver");
        }
        System.out.println(DriverMgr.getDriver("mysql"));
    }
}

Class.forName を呼び出すと、ドライバー クラスが読み込まれ、静的初期化子が実行されます。これにより、ドライバー クラスがドライバー マネージャーに登録され、マネージャーが認識できるようになります。明らかに、これは一度だけ行う必要があります。

于 2013-02-22T19:27:59.060 に答える
0

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

使用しているデータベースのドライバーをロードする必要があります。この行の forNmae() メソッドは、mysql データベースのドライバーをロードします。

于 2013-02-22T19:06:36.777 に答える
0

はい、毎回含める必要があります。ただし、コードを繰り返さない方法を使用できます。

例えば

public void connectToMYSQL(){
try{
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/yourdatabase","username",""password);
}catch(Exception ex)
{
System.out.println(ex.getMessage());
}

}

SQLステートメントを記述する前に、たとえばメソッドを呼び出すだけです

public void insert(String sql)
{
connectToMYSQL();
//.. then do your stuffs 

}
于 2013-02-22T19:02:09.133 に答える