JDBC:javaデータベース接続javaはデータベースに接続します。
sun companyは、すべてのリレーショナルデータベースを操作するルール(インターフェイス)を定義します。
統合されたJavaコードを使用すると、すべてのリレーショナルデータベースを操作できます。
各データベースベンダーは、インターフェイスを実装し、データベースドライバーjarパッケージを提供します。実行される実際のコードは、ドライバーjarパッケージの実装クラスです。
ステップ:
1.ドライバーjarパッケージをインポートします
ディレクトリの構築->パッケージの貼り付け->ライブラリとして追加
2.ドライバを登録します(書き込みできません)
3.接続オブジェクトを取得しますデータベースの接続
4.SQLを定義します
5.SQLステートメントを実行するオブジェクトステートメントを取得します
6. sqlを実行し、戻り結果を実行します
7.処理結果
8.リソースを解放します
DriveManager:ドライブ管理オブジェクト
特徴:
ドライバーを登録します(どのデータベースドライバーjarパッケージを使用するかをプログラムに指示します)
static void registerDriver(Driver driver):指定されたドライバーDriveManagerを登録します
写法:Class.forName( "com.mysql.jdbc.Driver");
原則:ソースコードを表示すると、com.mysql.jdbc.Driverに静的コードブロックがあり、DriveManagerのregisterDriverメソッドが呼び出されていることがわかります。
(mysql 5以降、ドライバーを登録する必要はありません。ドライバーは自動的に登録されます。作成することをお勧めします)
データベース接続を取得する
static Connection getConnection(String url、String user、String password)
url:接続のパスを指定します
構文:jdbc:mysql:// ip address:port number / database name
接続がローカルmysqlサーバーへの接続であり、mysqlサービスのデフォルトポートが3306である場合。URLは次のように省略できます。
jdbc:mysql:///データベース名
接続:データベース接続オブジェクト
sqlを実行するオブジェクトを取得します。
ステートメントcreateStatement()
PrepareStatement prepareStatement(String sql)
事務を管理する:
*オープントランザクション
setAutoCommit(boolean autoCommit):このメソッドを呼び出して、パラメーターをfalseに設定します。つまり、トランザクションを開きます。
*トランザクションをコミットする
専念()
*ロールバックトランザクション
rollback()
ステートメント:静的SQLステートメントを実行するために使用されます
SQLを実行します。
int executeUpdate(String sql):DML(挿入、更新、削除)ステートメント、DDL(作成、削除)ステートメントを実行します
戻り値:影響を受ける行数
DMLステートメントの成功は、影響を受ける行の数(> 0)によって判断できます。
ResultaSet executeQuery(String sql):DQL(select)ステートメントを実行します
ResultSet:クエリ結果をカプセル化する結果セットオブジェクト
カーソルはヘッダー位置から始まります
boolean next():カーソルが行を下に移動して、データがあるかどうかを判別します
getXxx():データを取得します。Xxxはデータ型を表します
getInt、getString、get...。
パラメータ:
列番号を表すintを渡します(1から始まります)
列の名前を表す文字列を渡しますgetString( "sex")
ResultSetトラバーサル:
JDBCツールクラス:JDBCUtils(簡略化された記述)
public class JDBCUtils { private static String url; private static String user; private static String password; //配置文件只读取一次,静态代码块 static{ //读取资源文件,获取值 Properties properties=new Properties(); //加载文件 try { properties.load(new FileReader("src/jdbc.properties")); url=properties.getProperty("url"); user=properties.getProperty("user"); password=properties.getProperty("password"); } catch (IOException e) { e.printStackTrace(); } } //获取连接 public static Connection getConnection() { try { return DriverManager.getConnection(url,user,password); } catch (SQLException e) { e.printStackTrace(); } return null; } //释放资源 public static void close(Statement st,Connection ct){ if(st!=null){ try { st.close(); } catch (SQLException e) { e.printStackTrace(); } } if(ct!=null){ try { ct.close(); } catch (SQLException e) { e.printStackTrace(); } } } public static void close(ResultSet rs,Statement st,Connection ct){ if(rs!=null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } close(st,ct); } }
PreparedStatement:SQLオブジェクトを実行します
SQLインジェクションの問題:
SQLをスプライシングする場合、文字列のスプライシングに関係するいくつかの特別なsqlキーワードがあり、セキュリティ上の問題が発生します。
解決策:PreparedStatementを使用してオブジェクトを表し、プリコンパイルされたSQLステートメントを実行します(パラメーターはプレースホルダーとして?を使用します)
使用するSQLパラメータを定義するとき?プレースホルダーとして
select *from user where username = ? and password = ?
SQLステートメントを実行するオブジェクトを取得します
PrepareStatement pre=Connection.prepareStatement(String sql);
?に値を割り当てます:
setXxx(参数1,参数2) //参数1:?位置 //参数2:?值
SQLを実行します:SQLを渡す必要はありません
注:preparedstatementは、後の段階での追加、削除、および変更に使用されます。