ガイドパッケージ: 必要な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 サイトの他の関連記事を参照してください。

MySQLはGPLライセンスを使用します。 1)GPLライセンスにより、MySQLの無料使用、変更、分布が可能になりますが、変更された分布はGPLに準拠する必要があります。 2)商業ライセンスは、公的な変更を回避でき、機密性を必要とする商用アプリケーションに適しています。

Myisamの代わりにInnoDBを選択する場合の状況には、次のものが含まれます。1)トランザクションサポート、2)高い並行性環境、3)高いデータの一貫性。逆に、Myisamを選択する際の状況には、1)主に操作を読む、2)トランザクションサポートは必要ありません。 INNODBは、eコマースプラットフォームなどの高いデータの一貫性とトランザクション処理を必要とするアプリケーションに適していますが、Myisamはブログシステムなどの読み取り集約型およびトランザクションのないアプリケーションに適しています。

MySQLでは、外部キーの機能は、テーブル間の関係を確立し、データの一貫性と整合性を確保することです。外部キーは、参照整合性チェックとカスケード操作を通じてデータの有効性を維持します。パフォーマンスの最適化に注意し、それらを使用するときに一般的なエラーを避けてください。

MySQLには、B-Treeインデックス、ハッシュインデックス、フルテキストインデックス、空間インデックスの4つのメインインデックスタイプがあります。 1.B-Treeインデックスは、範囲クエリ、ソート、グループ化に適しており、従業員テーブルの名前列の作成に適しています。 2。HASHインデックスは、同等のクエリに適しており、メモリストレージエンジンのHASH_TABLEテーブルのID列の作成に適しています。 3。フルテキストインデックスは、記事テーブルのコンテンツ列の作成に適したテキスト検索に使用されます。 4.空間インデックスは、地理空間クエリに使用され、場所テーブルのGEOM列での作成に適しています。

tocreateanindexinmysql、usethecreateindexstatement.1)forasinglecolumn、 "createdexidx_lastnameonemployees(lastname);" 2)foracompositeindexを使用して、 "createindexidx_nameonemployees(lastname、firstname);" 3); "3)、" 3)を使用します

MySQLとSQLiteの主な違いは、設計コンセプトと使用法のシナリオです。1。MySQLは、大規模なアプリケーションとエンタープライズレベルのソリューションに適しており、高性能と高い並行性をサポートしています。 2。SQLiteは、モバイルアプリケーションとデスクトップソフトウェアに適しており、軽量で埋め込みやすいです。

MySQLのインデックスは、データの取得をスピードアップするために使用されるデータベーステーブル内の1つ以上の列の順序付けられた構造です。 1)インデックスは、スキャンされたデータの量を減らすことにより、クエリ速度を改善します。 2)B-Tree Indexは、バランスの取れたツリー構造を使用します。これは、範囲クエリとソートに適しています。 3)CreateIndexステートメントを使用して、createIndexidx_customer_idonorders(customer_id)などのインデックスを作成します。 4)Composite Indexesは、createIndexIDX_CUSTOMER_ORDERONORDERS(Customer_Id、Order_date)などのマルチコラムクエリを最適化できます。 5)説明を使用してクエリ計画を分析し、回避します

MySQLでトランザクションを使用すると、データの一貫性が保証されます。 1)StartTransactionを介してトランザクションを開始し、SQL操作を実行して、コミットまたはロールバックで送信します。 2)SavePointを使用してSave Pointを設定して、部分的なロールバックを許可します。 3)パフォーマンスの最適化の提案には、トランザクション時間の短縮、大規模なクエリの回避、分離レベルの使用が合理的に含まれます。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

WebStorm Mac版
便利なJavaScript開発ツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ホットトピック









