JDBC概念:
Javaデータベース接続は、(Javaデータベース接続はJDBCをいう。)Java言語は、クライアントプログラムがデータベースへのアプリケーションインタフェースにアクセスする方法を調整するために使用されます。
MySQLデータベースでの接続:JDBC:MySQLの:// localhostを:3306 / ?データベース名をtrueに&characterEncoding = = useUnicode&serverTimezone = UTF8&useSslオプションGMT%2B8 =偽」;
データベースドライバをロードします:
// 1、ドライバのロード にClass.forName( "com.mysql.cj.jdbc.Driverを");
あなたはSQLサーバーをロードする場合:Class.forNameの( "com.microsoft.jdbc.sqlserver.SQLServerDriver");
接続を確立するには:
データベースURL:データベースプログラマは、URLアドレスを使用してJDBC接続プログラムを伝える場所識別データベースのためのURL。
URLが書かれている:" JDBC:MySQLの:// localhostの:? 3306 /データベース名パラメータ名=パラメータ値を..."
URLアドレスの共通データベースの文言:
オラクルます。jdbc:oracle:thin:@localhost:2521:データベース名
SQLServer:JDBC:マイクロソフトでは:のSQLServer:// localhostを:1433;データベース名=データベース名
MySQLの:JDBC:MySQLの:// localhostを:3306 /データベース名
接続:
、コレクションのためにデータベースをリンクするために使用されるJDBC接続プログラムは、データベースプログラミング、データベースクライアントの中で最も重要な目的の一つであり、すべての相互作用は、接続オブジェクトを介して行われます。
创建方法:接続CONN =したDriverManager.getConnection(URL、ユーザー、パスワード) ;
一般的な方法:
● のcreateStatement()は、データベースオブジェクトに送信されたSQL文を作成します
● のprepareStatement(SQL) ;のprepareStatementがデータベースにプリコンパイルされたSQLオブジェクトを作成、送信
● のprepareCall(SQL) ;ストアドプロシージャの実行のCallableStatementオブジェクトを作成します
● にsetAutoCommit(ブール値はautoCommit) ;セットのトランザクションを自動的に提出するかどうか
● コミット() ;リンク上でトランザクションをコミット
● ROLLBACK() ;このリンク上でトランザクションをロールバック
文字列のURL = "jdbc.mysql:// localhostを :3306 / データベース名" ; 文字列名 = "ユーザ名" ; 文字列のパスワード = "ユーザーパスワード" ; 接続でCONN = ヌル; // 2、買収およびデータベース・リンク CONN = DriverManager.getConnection(URL、ユーザ名、パスワード) ;
SQL文を実行します:
文の SQL文をデータベースに送るためのStatement JDBCプログラムのオブジェクト:。
作成方法:書のST = conn.createdStatement () 。
一般的な方法:
●のexecuteQuery(文字列のSQL);データベースにクエリを送信します
●のexecuteUpdate(文字列のSQL);挿入、更新またはステートメントを削除するために送信するためのデータベース
●(文字列のSQL)を実行し、データベースへのすべての文を送信するために
●addBatch(文字列のSQL);バッチに複数のSQL文を送信
●がexecuteBatch();実行するデータベースへのSQL文のグループを送信します。
STは、Statement = ヌルを; // 3を、データベースへの声明取得したSQL文を送信するための ST = conn.createdStatementを(); // 。SQLデータベースに送信された4、 文字列のSQL =「ID、名前を選択から、パスワード、電子メール、誕生日をユーザー st.executeQuery();
PreparedStatementの:このクラスは、文オブジェクトのサブクラスです
作成方法:PreparedStatementのST = conn.preparedStatement () 。
ST =のPreparedStatement はnull ; 文字列のSQL = "SELECT *ユーザーのパスワードから、名前= =?" ; // 3、のSQL文をデータベースに送るためのPreparedStatementを得る ST = conn.preparedStatement(SQL); // 受信SQL文は、プリコンパイルされ st.setString(1 、ユーザ名); st.setString( 2 、パスワード); // 4、データベースSQLに送信 st.executeQuery(); // ここでは、SQL文を渡しません
ステートメントとPreparedStatementの差:
SQLインジェクションを回避するためのPreparedStatement Statementオブジェクトの面で問題に関して。
如:文字列のSQL = "+ LOGINNAME + 'ここでログイン名=管理者からの選択* "" 'とloginpwd =' "+ loginPwd +"'" ;
アプリケーションには:
- 「アカウントを入力してください:
333
- 「あなたのパスワードを入力してください:
wer'or'1 '=' 1
トランスミッションは、実際には:SELECT * WHERE ADMIN LoginNameに= '333'からとloginpwd = 'は= wer'or'1' '1 '、ログインが成功します!
声明では、SQLコンパイル頻繁データベースは、データベースは、バッファオーバーフローを引き起こす可能性があります。SQLのためのPreparedStatementは、データベースの効率を改善するためにプリコンパイルすることができます。
そして、唯一の代替形式のプレースホルダを許可するSQLパラメータのためのPreparedStatementは、SQL文の作成を簡素化します。
結果を得ます:
結果の実装の代わりに、SQL文のJDBCのResultSetプログラム。実行結果のResultSetパッケージは、使用方法同様の形で、ResultSetオブジェクトは、カーソル線データテーブルへのポインタを維持する場合、最初の時間は、カーソルは、カーソルが特定のを指してもよいことを、最初の行の前ResultSet.next()メソッドを呼び出しますデータラインは、ラインのデータを取得するメソッドを呼び出します。
行を取得します:ResultSetが結果セット圧延するための方法を提供し、
●次の();次の行に移動
●前();前列に移動
●絶対値(INT行);特定の行に
●beforeFirstの(); ResultSetが一番に移動
●afterLastの(); ResultSetが最後尾に移動
値を取得:オブジェクトは、データを取得する取得するための方法を提供することにあるように、包装用の実行結果ので、ResultSetを
●任意のタイプのデータを取得します:
getObject(int型のインデックス);
getObjectメソッド(文字列COLUMNNAME)。
●データの指定されたタイプを取得します:
getString(int型のインデックス);
getString(文字列COLUMNNAME)。
ResultSetのRS = nullを。 // 4、向数据库发SQL、并获取代表结果集的ResultSetの 文字列のSQLが= "ユーザーからのID、名前、パスワード、電子メール、誕生日を選択して" ; RS = st.executeQuery(SQL)。 // 5、取出结果集的数据 rs.afterLast()。 rs.previous(); System.out.println( "ID =" + rs.getObject( "ID" ))。 System.out.println( "名=" + rs.getObject( "名前" )); System.out.println( "パスワード=" + rs.getObject( "パスワード" )); System.out.println( "Eメール=" + rs.getObject( "Eメール" )); System.out.println( "誕生日=" + RS。getObject( "誕生日" )); //全部またはループID削除し ながら(rs.nextを()){ 文字列ID = rs.getString(1); // 表1の列数はデータベースを表し、IDは、最初の列( "ID")であってもよいです!!! System.out.println( "ID =" + ID); }