###### JDBC
-Javaデータベース接続、Javaデータベース接続。実際、JDBCは、データベースと対話するJavaのAPI(アプリケーションプログラムインターフェイス)のセットです。
##### JDBCを使用する理由
-Javaは複数のデータベースに接続する必要があるため、各データベースが新しいAPIのセットを学習するのを避けるために、Sunは一連のjdbc標準(インターフェース、メソッド宣言)を定義し、さまざまなデータベースベンダーがこのインターフェースに基づいてメソッド実装を記述しています(データベースドライバー)。したがって、Javaプログラマーはjdbcインターフェースのメソッド呼び出しをマスターし、任意のデータベースに接続するための一連のメソッドをマスターし、jdbc規格に準拠する一連のコードは任意のデータベースに接続できます。
エクストラネット:maven.aliyun.com
pom.xmlはjarパッケージアドレスを導入します<dependencies> </ dependency>
##### jdbcの使用方法
1. mavenプロジェクトの作成
2. Maven エクストラネット検索mysql jarパッケージをプロジェクトに配置するpom.xmlの
操作は次のとおりです:
// 1.ドライバーを登録します
// com.mysql.jdbc.Driver
Class.forName( "com.mysql.jdbc.Driver");
// 2.接続オブジェクトを取得します
Connection connection = DriverManager.getConnection ( "jdbc:mysql:// localhost:3306 / db3"、 "root"、 "lf215000");
System.out.println(connection);
// 3. SQL実行オブジェクトを作成する
Statementステートメント= connection.createStatement();
// 4. SQLを実行
//文字列sql = "存在しない場合はテーブルを作成jdbct1(id int、name varchar(10))"; //存在しない場合は作成
文字列sql = "drop table present if jdbct1";
statement.execute(sql);
System.out.println( "执行成功!");
// 5。关闭资源
statement.close();
connection.close();
##### SQLオブジェクトを実行する方法
-execute(sql)このメソッドの戻り値は結果セット(ブール)があるかどうかを表します。このメソッドは任意のSQLを実行できますが、DDL(データ定義言語create drop alter truncate)を実行することをお勧めします
-executeUpdate(sql)はこのメソッドの追加、削除、変更を実行できます戻り値は、有効な行数を示すint型です
-executeQuery(sql)はクエリSQLステートメントを実行し、戻り値は結果セットです
######データベースタイプとJavaタイプの比較
mysql java
int getint
varchar getString
float / double getfloat / getDouble
datetime / timestamp getDate
###### resultSetデータを取得する2つの方法
1.getString(フィールド名)
2.getString(クエリ結果フィールドの位置)は1から始まります
######プロパティプロパティ構成オブジェクト
-* .properties構成ファイル(キーと値のペアのキー:値)のデータを読み取るために使用されます
-usage:
//プロパティオブジェクトを作成します
プロパティプロパティ=新しいプロパティ();
/ /ファイル入力ストリームを取得します
InputStream inputStream = Demo04.class.getClassLoader()。GetResourceAsStream( "jdbc.properties");
//オブジェクトにファイルを読み込みます
properties.load(inputStream);
//データを読み取ります
文字列名= properties.getProperty( "name");
//読み取られたものは すべて
String 型ですage = properties.getProperty( "age");
System.out.println( "name =" + name + "age =" +年齢);
#### DBCPデータベース接続プール
-
データベース接続プール-データベース接続プールを使用する理由:
データベース接続プールがない場合、Webサーバーはデータと対話するたびに接続を確立する必要があります。それを使用した後、接続を閉じます。10,000の対話がある場合、10,000の接続の開始と終了が発生します。接続のオンとオフを頻繁に切り替えると、リソースの無駄になります。データベース接続プールを使用して、接続の初期数と最大接続数を設定できます。データとの各対話は、接続プールから切断され、接続を切断する代わりに接続プールに戻されます。これにより、再生できます。リソースの浪費を回避するためのデータベース再利用の役割-
データベース接続プールの使用方法
###### StatementとPreparedStatement
-PrepareStatementプリコンパイルされたSQL実行オブジェクト
1.利点は、SQLのロジックがコンパイル時に指定されているためSQLインジェクションを回避でき、置換されたコンテンツのためにロジックが変更されないこと
です。2. SQLがステートメント文字列のステッチ方法と比較して変数を含む場合、コードの可読性が向上し、ミスを犯しにくくなります。3
。複数のSQLのバッチ実行が含まれる場合にPreparedStatementを使用する方が効率的である場合
-SQLに変数がない場合は、Statementを使用し、変数はPreparedStatementを使用します。
#######バッチ操作
-Statementバッチ
ステートメント= connection.prepareStatement(sql);
for(int i = 0; i <100; i ++){
statement.setString(1、 "name" + i);
statement.setString(2、 "admin" + i );
//バッチ操作
ステートメントを追加します。addBatch ();
if(i%20 == 0){
//バッチ操作
ステートメントを
実行します。statement.executeBatch (); //実行されたSQL
ステートメントを空にします。clearBatch();
}
}
/ /バッチ操作を実行し、残りの
ステートメントを閉じます。executeBatch ();
#######トランザクション
1.自動送信をオン/オフにします
connection.setAutoCommit(false / true);
2.トランザクション
を送信しますconnection.commit();
3. connection.rollback();をロールバックし
ます
-Realize転送:
スーパーマン500バットマン5000
バットマンからスーパーマン2000への転送
最初の成功した
実行2番目の成功した
実行3番目の失敗残高が不十分でロールバックされた
テーブルjdbc_personを作成(id int、name varchar(10)、money int);
jdbc_personに挿入しますvalues(1、 '超人'、500)、(2、 '大胆不潔'、5000);
-コード参照demo08.java
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
public class Demo08 {
public static void main(String [] args){
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
connection = DBUtils.getConnection();
statement = connection.createStatement();
//トランザクションを開く(自動 送信をオフにする)
connection.setAutoCommit(false);
// SQLを転送する準備をする
String sql1 = "update jdbc_person set money = money-2000 where id = 2";
String sql2 = "update jdbc_person set money = money + 2000 where id = 1 ";
// transfer
ステートメントを実行します。executeUpdate(sql1);
statement.executeUpdate(sql2);
//バットマンの残金が0以上かどうかを照会します
String sql3 = "select money from jdbc_person where id = 2";
resultSet = statement.executeQuery(sql3);
while(resultSet.next()) {
int money = resultSet.getInt( "money");
if(money> = 0){// money is十分な
connection.commit();
System.out.println( "Transfer successful");
}それ以外の場合{// moneyは十分ではありません
connection.rollback();
System.out.println( "Transfer failed");
}
}
} catch(例外e){
e.printStackTrace();
}最後に{
DBUtils.close(connection、statement、resultSet);
}
}
}
######増分主キーの値を取得します
テーブルチームを作成(id int primary key auto_increment、name varchar(10));
テーブルプレーヤーを作成します(id int主キーauto_increment、name varchar(10)、tid int);
ヌル
例:
八尾明ロケット
チームテーブル
ID名
1ロケッツ
プレーヤーテーブル
ID名tid
八尾明1
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;
パブリッククラスDemo09 {
public static void main(String [] args){
Scanner sc = new Scanner(System.in);
System.out.println( "Please enter the team name:");
String teamName = sc.nextLine();
System.out .println( "プレイヤー名を入力してください:");
String playerName = sc.nextLine();
sc.close();
Connection connection = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
try {
connection = DBUtils.getConnection( );
//最初にチームが存在するかどうかを確認します。チームIDがある場合
String s = "select id from team where name =?";
Statement = connection.prepareStatement(s);
statement.setString(1、teamName);
resultSet = statement.executeQuery();
int teamId = -1;
while(resultSet.next()){
//データベースからレポートをクエリします
teamid teamId = resultSet.getInt( "id");
}
if(teamId ==- 1){//チームは
String sql = "insert into team values(null、?)";の前に保存されていません;
//ステートメントを複数回作成すると、閉じられていないことを警告し、前のステートメント
statement.close()を閉じてから警告します;
statement = connection.prepareStatement(sql、Statement.RETURN_GENERATED_KEYS);
statement.setString(1、teamName);
statement.executeUpdate();
//自動インクリメントの主キーを取得します
resultSet.close();
resultSet = statement.getGeneratedKeys();
while(resultSet.next()){
teamId = resultSet.getInt(1);
}
}
//之前保存過球队
//挿入入球员
String sql1 = "insert into player values(null、?、?)";
ステートメント= connection.prepareStatement(sql1);
statement.setString(1、playerName);
statement.setInt(2、teamId);
statement.executeUpdate();
} catch(例外e){
e.printStackTrace();
}最後に{
DBUtils.close(connection、statement、resultSet);
}
}
}
#####ソースデータ-
ソースデータは、データベースとテーブルに関連する情報を指します
例:
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
/ **
*ソースデータ(データベースの基本情報またはテーブルの基本情報)
* @author BARCA球王= Andrew Feng
* @version 1.0
* @see
* @since
* /
public class Demo10 {
public static void main(String [] args) {
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
connection = DBUtils.getConnection();
statement = connection.createStatement();
//データベースソースデータオブジェクトを取得します
DatabaseMetaData metaData = connection.getMetaData();
System.out.println( "ドライブバージョン" + metaData.getDriverVersion());
System.out.println( "ユーザー名" + metaData.getUserName());
System.out.println( "接続アドレス" + metaData.getURL());
System.out.println( "データベース名" + metaData.getDatabaseProductName ());
//テーブルのメタデータを取得します
resultSet = statement.executeQuery( "select * from emp");
ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
//テーブルのフィールドを取得します
int columCount = resultSetMetaData.getColumnCount();
/ /
(int i = 0; i <columCount; i ++)のフィールド名を取得します{
文字列名= resultSetMetaData.getColumnName(i + 1);
文字列型= resultSetMetaData.getColumnTypeName(i + 1);
System.out.println(name + ":" + type);
}
} catch(例外e){
e.printStackTrace();
}最後に{
DBUtils.close(connection、statement、resultSet);
}
}
}