開発手順とネイティブ JDBC の導入
ガイドパッケージ: 必要なjarパッケージをプロジェクト名の下に新しく作成したlibフォルダーにコピーします
jdbcのネイティブ開発手順
1. ドライバーを登録します
2. 接続を取得します
3. Get Executorオブジェクト
4. 結果セットの取得
5. 結果セットの処理
6. リソースの解放
JDBC
Java DataBase Connectivity、Javaデータベース接続は、SQL Javaを実行するために使用されるメソッドですステートメント用の API。
JDBC は、Java がデータベースにアクセスするための標準仕様であり、Java 言語で記述された一連のインターフェイスとクラスで構成されています。
ドライバー
ドライバーは、2 つのデバイスが通信し、特定の通信データ形式を満たすために、機器プロバイダーがデバイス用のドライバー ソフトウェアを提供するためのものです。ソフトウェアはデバイスとの通信に使用できます。
JDBC仕様 (4つのコアオブジェクトをマスター)
DriverManager: ドライバーの登録に使用されます
Connection: データベースと作成された接続を表します
Statement: データベースのSQL文を操作するオブジェクト
ResultSet: 結果セットまたは仮想テーブル
mysql が提供するドライバーを介して JDBC テクノロジーを使用し、データベースを操作する手順は次のとおりです:
1. ドライバーを登録します
使用しているドライバーを JVM に伝えます (mysql、oracle...)
DriverManager.registerDriver( new com.mysql.jdbc.Driver()); の使用は次の 2 つの理由から推奨されません
> ドライバーが 2 回登録されることになります。
> データベース ドライバー jar に強く依存します
解決策:
Class.forName("com.mysql.jdbc.Driver");
2. データベース接続を取得します
データベースは TCP プログラム サーバーであり、サーバーに接続します ( 3 ウェイ ハンドシェイクを通じて)
は、Java プログラムからデータベース サーバーへの接続パスを確立することと同等です
static Connection getConnection(String url, String user, String password)
指定されたデータベース URL への接続の確立を試みます。
パラメータの説明: url データベースに接続する必要がある場所 (Web アドレス) user ユーザー名 パスワード パスワード
例: getConnection("jdbc:mysql://localhost:3306/day06", "root", "root") ;
URL: SUN 企業とデータベース ベンダー間の契約。
jdbc:mysql://localhost:3306/day06
プロトコル サブプロトコル IP: ポート番号データベース
mysql: jdbc:mysql://localhost:3306/day04 または jdbc:mysql:///day14 (デフォルトのローカル接続)
oracle データベース: jdbc:oracle:thin:@localhost:1521:sid
3. executor オブジェクトを取得します
SQL ステートメントを実行するオブジェクト、その機能は SQL を実行することです
インターフェイスの実装はデータベース ドライバーにあります。データベースとのすべての対話は接続オブジェクトに基づいています。
Statement createStatement(); //SQL文を操作するためのオブジェクトを作成する
4. SQL文を実行して結果セットを取得する
executorオブジェクトを使用してSQL文を実行する
SQL文の結果セットを取得する(add, delete、modify: 整数、有効な行番号クエリを実行します :Return は結果セットです)
一般的なメソッド:
? intexecuteUpdate(String sql); -- ResultSet を実行します。 -select ステートメントを実行します。
? boolean use(String sql); --select が実行されて結果がある場合にのみ true を返し、他のステートメントを実行する場合は false を返します。
5. 結果セットの処理
ResultSet は実際には2 次元のテーブルを指すブール型の next() メソッドを呼び出すことができます。レコードの行が初めて呼び出されるとき、next() メソッドはこの時点でレコードの最初の行の位置を指します。 ResultSet が提供する getXXX(int col) メソッド (0 から始まるインデックスとは異なり、列は 1 Start から始まります) を使用して、指定された列のデータを取得できます:
rs.next();// first row
rs.getInt(1);// 最初の行と最初の列のデータを取得します
共通メソッド:
? Object getObject( int Index) / Object getObject(String name) 任意のオブジェクトを取得します
? Index)/ String getString(String name) 文字列を取得します
? int getInt(int Index)/int getInt(String name) 整数を取得します
? double getDouble(int Index)/ double getDouble(String name) 倍精度浮動小数点を取得します
6. リソースを解放します
IO ストリームと同様、使用後はすべてを閉じる必要があります。クローズする順序は、最初に取得してからクローズし、後で取得して最初にクローズすることです。
JDBC を使用してデータベース コードを追加、削除、変更、クエリするデモ:
1 public static void main(String[] args) throws Exception { 2 //1.注册驱动 3 Class.forName("com.mysql.jdbc.Driver"); 4 //2.获取数据库连接 5 String url = "jdbc:mysql://localhost:3306/mybase4"; 6 String user = "root"; 7 String password = "root"; 8 Connection conn = DriverManager.getConnection(url, user, password); 9 //3.获取执行者对象 10 Statement stat = conn.createStatement(); 11 //调用更新数据的方法 12 //update(stat); 13 //调用删除数据的方法 14 //delete(stat); 15 //调用增加数据的方法 16 //insert(stat); 17 //调用查询数据的方法 18 select(stat); 19 //6.释放资源 20 stat.close(); 21 conn.close(); 22 } 23 24 /* 25 * 使用JDBC技术,查询数据库中表的数据 26 */ 27 private static void select(Statement stat) throws Exception { 28 //拼接sql语句 29 String sql = "SELECT * FROM category"; 30 /* 31 * 4.执行sql语句 32 * 使用Statement中的方法 33 * ResultSet executeQuery(String sql) 执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。 34 * 返回值ResultSet标准接口的实现类对象,实现类对象由mysql驱动提供,可以使用ResultSet接口接收 35 */ 36 ResultSet rs = stat.executeQuery(sql); 37 System.out.println(rs);//com.mysql.jdbc.JDBC4ResultSet@1acb189 38 /* 39 * 5.处理结果 40 * ResultSet中有一个方法 41 * boolean next() 将光标从当前位置向前移一行。 42 * 如果新的当前行有效,则返回 true;如果不存在下一行,则返回 false 43 * 如果有结果集返回true,若果没有结果集返回false 44 * 相当于迭代器中的hasNext方法 45 */ 46 while(rs.next()){ 47 /* 48 * next返回true,有结果集 49 * 取出结果集 50 * 使用ResultSet中的方法getXXX(参数); 51 * 参数: 52 * int columnIndex:列所在的索引,从1开始 53 * String columnLabel:列名 54 * 注意: 55 * 如果使用getInt,getDouble指定数据类型的方法,返回值就是对应的数据类型 56 * 如果使用getObject方法返回值是object类型(只是打印可用) 57 * 如果使用getString方法返回值是String类型 58 */ 59 /*int i1 = rs.getInt(1); 60 String s2 = rs.getString(2); 61 System.out.println(i1+"\t"+s2);*/ 62 63 //System.out.println(rs.getObject(1)+"\t"+rs.getObject(2)); 64 System.out.println(rs.getObject("cid")+"\t"+rs.getObject("cname")); 65 //5.释放资源 66 rs.close(); 67 } 68 } 69 70 /* 71 * 使用JDBC技术,对数据库中的表数据进行增加 72 */ 73 private static void insert(Statement stat) throws SQLException { 74 //拼接sql语句 75 String sql = "INSERT INTO category(cname) VALUES('玩具')"; 76 //4.执行sql语句 77 int row = stat.executeUpdate(sql); 78 //5.处理结果 79 if(row>0){ 80 System.out.println("增加数据成功!"); 81 }else{ 82 System.out.println("增加数据失败!"); 83 } 84 85 } 86 87 /* 88 * 使用JDBC技术,对数据库中的表数据进行删除 89 */ 90 private static void delete(Statement stat) throws Exception { 91 //拼接sql语句 92 String sql = "DELETE FROM category WHERE cid=5"; 93 //4.执行sql语句 94 int row = stat.executeUpdate(sql); 95 //5.处理结果 96 if(row>0){ 97 System.out.println("删除数据成功!"); 98 }else{ 99 System.out.println("删除数据失败!");100 }101 }102 103 /*104 * 使用JDBC技术,对数据库中的表数据进行更新105 */106 private static void update(Statement stat) throws Exception {107 //拼接sql语句108 String sql = "UPDATE category SET cname='鞋帽' WHERE cid=6";109 //4.执行sql语句110 int row = stat.executeUpdate(sql);111 //5.处理结果112 if(row>0){113 System.out.println("更新数据成功!");114 }else{115 System.out.println("更新数据失败!");116 }117 }
1 JDBC工具类 2 “获得数据库连接”操作,将在以后的增删改查所有功能中都存在,可以封装工具类JDBCUtils。提供获取连接对象的方法,从而达到代码的重复利用。 3 代码演示: 4 public class JDBCUtils { 5 6 //私有构造方法,防止外界创建对象调用方法 7 private JDBCUtils() { 8 } 9 10 //定义Connectionn变量11 private static Connection conn;12 13 //保证代码只执行一次,可以放入静态代码块中14 static{15 try {16 //注册驱动17 Class.forName("com.mysql.jdbc.Driver");18 //获取连接19 String url="jdbc:mysql://127.0.0.1:3306/mybase4";20 String user="root";21 String password = "root";22 conn = DriverManager.getConnection(url, user, password);23 } catch (Exception e) {24 //注意,如果连接数据库失败,停止程序25 throw new RuntimeException(e+"连接数据库失败");26 }27 }28 29 //创建一个静态方法,获取数据库连接对象,并返回30 public static Connection getConnection(){31 return conn;32 }33 34 /*35 * 创建一个静态方法,对资源进行释放36 * ResultSet rs37 * Statement stat38 * Connection conn39 */40 public static void close(ResultSet rs,Statement stat,Connection conn){41 try {42 if(rs!=null){43 rs.close();44 }45 } catch (SQLException e) {46 e.printStackTrace();47 }48 try {49 if(stat!=null){50 stat.close();51 }52 } catch (SQLException e) {53 e.printStackTrace();54 }55 try {56 if(conn!=null){57 conn.close();58 }59 } catch (SQLException e) {60 e.printStackTrace();61 }62 }63 }
SQL インジェクションの問題
SQL インジェクション: ユーザーが入力した内容が SQL ステートメント構文の一部として使用され、元の SQL の本当の意味が変更されます。
ログインケースがあり、SQL ステートメントが次のようになっているとします。
SELECT * FROM user table WHERE NAME = ユーザーが入力したユーザー名 AND PASSWORD = ユーザーが入力したパスワード
この時点で、ユーザーが正しいアカウントを入力すると、番号とパスワードを入力し、情報を照会したら、ユーザーをログインさせます。ただし、ユーザーがアカウント番号 XXX とパスワードを入力すると、次のようになります: a'='a';
現時点では、上記のクエリ ステートメントは常に結果を生成できます。その後、ユーザーは直接ログインに成功します。これは SQL インジェクションの問題です。
この目的のために、PreparedStatement を使用して対応する問題を解決します。
特徴:
高性能
SQLステートメントが最初にコンパイルされます
ユーザーが入力したキーワードをフィルターで除外できます。
String sql = "select * from user where username = ? and password = ?";
PreparedStatement を使用するには、次の 3 つの手順を完了する必要があります:
1. PreparedStatement 前処理オブジェクト コード:
前処理オブジェクトを取得するには、次のものが必要です。文字処理後に使用するアカウントのSQL文を提供します
PreparedStatement psmt = conn.prepareStatement(sql)
2.実際のパラメータを設定します
void setXxx(intindex, Xxx xx) 指定されたパラメータを指定された型の値に設定します
パラメータ 1: インデックス 1 から始まる実際のパラメータのシーケンス番号。
パラメータ 2: xxx の実際のパラメータ値、xxx は特定のタイプを表します。
例:
setString(2, "1234") SQL ステートメントの 2 番目の位置にあるプレースホルダーを実際のパラメーター「1234」に置き換えます。
3. SQL ステートメントを実行します。 update delete ステートメント。
ResultSetexecuteQuery(); -- select ステートメントを実行します。
boolean use(); -- select を実行し、true を返します。
以上が開発手順とネイティブ JDBC の導入の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Java8-291 以降、TLS1.1 が無効になっているため、JDBC が SSL を使用して SqlServer2008 に接続できません。どうすればよいですか? java.security ファイルを変更する解決策は次のとおりです。 1. jre の java.security ファイルを見つけます。それが jre である場合は、lib/security の {JAVA_HOME}/jre/ に移動します (例:???C:\ProgramFiles\Java\jre1.8.0_301\lib\security)。Eclipse グリーンのインストール不要のポータブル バージョンの場合、インストール フォルダーで java.security を検索します (例: ????xxx\plugins \org)

Java のアプリケーションが広く普及しているため、Java プログラムがデータベースに接続するときに JDBC エラーが発生することがよくあります。 JDBC (JavaDatabaseConnectivity) は、データベースへの接続に使用される Java のプログラミング インターフェイスです。したがって、JDBC エラーは、Java プログラムがデータベースと対話するときに発生するエラーです。ここでは、最も一般的な JDBC エラーのいくつかと、それらを解決および回避する方法を示します。 ClassNotFoundException これは最も一般的な JDBC です

1. JDBC では、executeBatch メソッドを使用して複数の dml ステートメントをバッチで実行でき、executeUpdate を個別に実行するより効率が高いことを説明します。その原理は何ですか? mysqlとoracleでバッチ実行を実装するにはどうすればよいですか?この記事ではその原理を紹介します。 2. 実験の導入 この実験は、次の 3 つの手順で実行されます: a. mysql で jdbc バッチ実行と単一実行にかかる時間を記録する; b. oracle で jdbc バッチ実行と単一実行にかかる時間を記録する; c. jdbc バッチ実行と単一実行にかかる時間を記録するoracleplsql のバッチ実行と単一実行を記録します。実行に時間がかかる関連する Java およびデータベースのバージョンは次のとおりです: Java17、Mysql8、Oracle

1. データベース プログラミングの前提条件 プログラミング言語 (Java、C、C++、Python など)、およびその他のデータベース (Oracle、MySQL、SQLServer など)、およびその他のデータベース ドライバー パッケージ: データベースが異なれば、プログラミング言語に対応するデータベース ドライバー パッケージも異なります。 : MySQL は、Java ベースで MySQL を動作させるために必要な Java ドライバー パッケージ mysql-connector-java を提供します。同様に、Java ベースで Oracle データベースを動作させるには、Oracle のデータベース ドライバー パッケージ ojdbc が必要です。 2. Java データベース プログラミング: JDBCJDBC、JavaDatabaseConnectiv

近年、Java 言語のアプリケーションはますます普及しており、JDBCAPI は、Java アプリケーションがデータベースと対話するための独創的な方法です。JDBC は、ODBC と呼ばれるオープン データベース接続標準に基づいており、Java アプリケーションは任意のデータベースに接続できます。データベース管理システム (DBMS)。その中でも、MySQL は人気のあるデータベース管理システムです。ただし、開発者は、MySQL データベースに接続するときに、いくつかの一般的な問題に遭遇することもあります。この記事は、JDBCAPI 接続 M を紹介することを目的としています。

現在、CSS ネイティブ ネスティング構文は開発者試用段階にあり、CSS ワーキング グループが関連仕様の策定を行っており、Chrome ブラウザではバージョン 112 で CSS ネイティブ ネスティング機能が正式に開始される予定です。

Hibernate と JDBC の違い: 抽象化レベル: Hibernate は高レベルのオブジェクト マッピングとクエリ生成を提供しますが、JDBC では手動コーディングが必要です。オブジェクト リレーショナル マッピング: Hibernate は Java オブジェクトとデータベース テーブルをマップしますが、JDBC はこの機能を提供しません。クエリの生成: Hibernate は HQL を使用してクエリの生成を簡素化しますが、JDBC では複雑な SQL クエリを作成する必要があります。トランザクション管理: Hibernate はトランザクションを自動的に管理しますが、JDBC は手動で管理する必要があります。

JDBC の基本的な入門概念 JDBC (JavaDataBaseConnectivity、Java データベース接続) は、SQL ステートメントの実行に使用される Java API であり、さまざまなリレーショナル データベースへの統合アクセスを提供できます。Java 言語で記述された一連のクラスとインターフェイスで構成されています。 JDBC 仕様ではインターフェースが定義されており、具体的な実装は大手データベースベンダーが実装しています。 JDBCはJavaがデータベースにアクセスするための標準仕様であり、実際にデータベースを操作するには専用の実装クラス、つまりデータベースドライバが必要です。各データベース メーカーは、独自のデータベースの通信形式に従って独自のデータベース ドライバーを作成します。したがって、J を呼び出すことができれば十分です。
