JDBCだけではなく、クエリを実行し、あなたはまた、JDBC経由でデータベースを最大限に制御することができ、そのようなSQL文としてDDL、DMLを実行することができます。
またはexecuteLargeUpdateメソッドを使用してDDLとDMLステートメントを実行するためのexecuteUpdateを使用します。
現在のmysqlデータベースのヴァンexecuteUpdateメソッドによって表されるデータベースを作成するプログラムを書きます:
パブリック クラスJDBC { String型ドライバー; 文字列のURL; 文字列ユーザー; 文字列のパスワード; // データベースが対応するテーブルを持っているかどうかをチェックするには、返されたトゥーレがあり、falseに戻らない 公共 ブールtableIsExists(文字列tableNameの){ 試み{ 接続connは = のDriverManagerを。 getConnection(URL、ユーザ、パスワード); 声明 = conn.createStatement(); 文字列のSQL =は"TABLE_SCHEMA = 'テスト'のINFORMATION_SCHEMA.TABLES TABLE_NAMEからSELECT" ; のResultSetたresultSet = Statement.executeQuery(SQL); ながら、(resultSet.next()){ 文字列queryTableName = resultSet.getString(1 )。 System.out.println(queryTableName)。 もし(queryTableName.equals( "tb_test" )){ 戻り 真。 } } } キャッチ(例外e)は{} を返す 偽。 } 公共 ボイドcreateTableJDBC(文字列tableNameの){ 試み{ 接続CONN = たDriverManager.getConnection(URL、ユーザ、パスワード)。 声明 =conn.createStatement(); IF(!tableIsExists(tableNameの)){ System.out.printlnは( "現在のデータベースがありません" + tableNameの+ + tableNameの+ "データベーステーブル" "フォーム、作成します" ); 文字列のSQLが = "表の作成" + + tableNameの"(" + "test_id AUTO_INCREMENT int型主キー、" + "TEST_NAME VARCHAR(255)、" + "test_descテキスト)" ; int型の結果= Statement.executeUpdate(SQL); } 他{ System.out.printlnは(「現在データベースは、「+ tableNameの+」の形を持っている、 "作成されません。+ tableNameの+ "データベーステーブル" ); } } キャッチ(例外e){} } パブリック 静的 ボイドメイン(文字列[]引数){ // TODO自動生成方法スタブ JDBCのJDBC = 新しいJDBC()。 jdbc.initParam( "mysql.properties" ); jdbc.createTableJDBC( "tb_test" ); } }
次のように最初の結果は以下のとおりです。
tb_adminuserの
tb_userは
現在のところtb_testデータベーステーブルは、データベーステーブルがtb_testを作成されません
この第二の結果は、(そうでない場合、次に動作MySQLデータ)以下の通りであります:
tb_adminuser
tb_test
現在のデータベースは、データベーステーブルtb_testを作成しません、tb_testフォームを持っています
プログラミングは、上記の表に新しいデータを追加します。
パブリック クラスJDBC { 文字列ドライバと、 文字列のURL。 文字列のユーザー。 文字列のパスワード。 公共 のボイドinitParam(文字列paramFile){ しようと{ プロパティの小道具は = 新しいプロパティ(); props.load(新しいFileInputStreamを(paramFile)); ドライバ = props.getProperty( "ドライバ" )。 URL = props.getProperty( "URL" ); ユーザー = props.getProperty( "ユーザ" )。 パスワード = props.getProperty( "パスワード" ); } キャッチ(例外E){} } 公共 のボイドは、addData(表文字列、文字列のSQL){ 試み{ 接続connは = したDriverManager.getConnection(URL、ユーザ、パスワード); 声明 = conn.createStatement(); int型 resultRow = ステートメント。 executeUpdate(SQL) のSystem.out.println( +テーブル+「に」+「表1には、衝撃の行の数でデータテーブルを追加」resultRow); } キャッチ(例外E){} } パブリック 静的 ボイドメイン(文字列[]引数){ //TODO自動生成されたメソッドスタブ のJDBC JDBC = 新しいJDBC(); jdbc.initParam( "mysql.properties" ); 文字列テーブル =「tb_test」。 文字列のSQL = +テーブル+ "挿入""(TEST_NAME、test_desc)の値( 'HJL'、 '0');" ; jdbc.addData(テーブル、SQL)。 } }
効果を実行し、次のとおりです。
Tb_testデータテーブルに追加、テーブルの行の数によって影響されます
すなわち、のexecuteUpdate(文字列のSQL)を使用して試験することができる動作テーブルの内容は、したがって、2つのコード0を介して戻されるので、代わりに値DDLステートメントの、ことを除いて、データベースDMLステートメントDDLステートメント動作であります行およびDMLステートメントの数は、このように、リターンフォームの内容に影響を与える、コンテンツ動作テーブルである;.
executeメソッドを使用してSQL文を実行します。
唯一のSQL文の種類を知らない、保証するためには、execute()メソッドは、ほぼすべてのSQLステートメントを実行することができますが、SQL文のexecuteQuery()メソッドまたはのexecuteUpdate()メソッドを実行するために、通常は、SQL文を実行あまりにも面倒であるの声明間違っていない、それはexecute()メソッドを使ってSQL文を実行するのが最善です。
実行使用します()の戻り値は、取得したクエリを実行するResultSetオブジェクトを取得する方法、およびそれを得るために実行int型の値DDLやDML文を得るために、どのようにして、ブールのですか?このような状況に鑑みて、ステートメントは、次の2つの方法が用意されています。
1.getResultSet():このメソッドは、ステートメントが返されるクエリーResultSetオブジェクトを実行して返します。
2. getUpdateCountは():このメソッドは、行の数に影響statementDDL、DMLステートメントを返します。
次の手順では、SQL文を使用して、任意なステートメントを実行するには、execute()メソッドを示しています。
パブリック クラスJDBC { // 使用実行方法进行对表查询 公共 無効queryByExecuteMethod(文字列テーブル){ しようと{ 文字列のSQLは + "SELECT * FROM" = 表。 ブール B = のStatement.execute(SQL)。 もし(B){ するSystem.out.println( "方法を実行返回" + B)。 ResultSetの結果 = statement.getResultSet()。 int型のカウント= 0 ; 一方、(result.next()){ カウント ++ 。 } のSystem.out.println( + "合計が尋ね" +カウント"レコード" ); } 他 {するSystem.out.println(+ "メソッドが戻る実行" Bを);} } キャッチ(例外E){} } // 実行DMLはテーブルの内容を削除する使用方法 の公共 のボイドdeleteDataByExecuteMethod(文字列テーブル){ 試み{ 文字列のSQLが = + "から削除" ;テーブル ブール B = のStatement.execute(SQL); IF(!{B) のSystem.outを。 println(「メソッドの戻りを実行」+ B)。 System.out.println(表 + "影響を受けた行の数は次のとおりです。「+Statement.getUpdateCount()); } 他 {するSystem.out.println( "実行メソッドが戻る" + B);} } キャッチ(例外E){} } // 使用法は、DDL削除を実行しますテーブル 公共 無効dropTableByExecuteMethod(文字列テーブル){ 試み{ 文字列のSQL + = "表のドロップ" テーブル; ブール B = のStatement.execute(SQL); IF(!B){ System.out.printlnは( "Executeメソッドの戻り" + B); System.out.printlnは(表+ "受影响行数为:" + statement.getUpdateCount()); } 他 {するSystem.out.printlnは( "実行方法返回" + B);} } キャッチ(例外e){} } 接続CONN = NULL ; 声明 = nullを。 公共JDBC(文字列paramFile){ しようと{ プロパティの小道具は = 新しいプロパティ(); props.load(新しいFileInputStreamを(paramFile)); 列ドライバ = props.getProperty(「ドライバ」)。 文字列のURL = props.getProperty( "URL" ); 文字列のユーザー= props.getProperty( "ユーザ" )。 文字列のパスワード = props.getProperty( "パスワード" ); CONN = したDriverManager.getConnection(URL、ユーザー、パスワード); 声明 = conn.createStatement(); } キャッチ(例外e){} } パブリック 静的 ボイドメイン(文字列[]引数){ // TODO自動生成方法スタブ 文字列テーブル =「tb_test」。 JDBC jdbc_2 = 新しい JDBC( "mysql.properties" ); jdbc_2.queryByExecuteMethod(表)。 jdbc_2.deleteDataByExecuteMethod(表)。 jdbc_2.dropTableByExecuteMethod(表)。 } }
クエリが真の値を返す上記の手順で、execute()メソッドは、それぞれクエリ、3つのSQL文を実行使用して、DMLステートメントのDDLステートメントで、オブジェクトは、真の値に応じたResultSet Statementオブジェクトから取得し、そしてに従って偽の値、StatementオブジェクトからgetUpdateCountは()メソッドの値を取得し、効果を実行することです。
方法は、真の実行返す クエリが2つのレコードの合計 方法を実行するがfalseを返す 影響を受ける行数tb_testある: 2 メソッドを実行falseを返す 行数の影響によってtb_testである: 0