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

Java8-291之后,禁用了TLS1.1,使JDBC无法用SSL连接SqlServer2008怎么办,以下是解决办法修改java.security文件1.找到jre的java.security文件如果是jre,在{JAVA_HOME}/jre/lib/security中,比如????C:\ProgramFiles\Java\jre1.8.0_301\lib\security如果是Eclipse绿色免安装便携版在安装文件夹搜索java.security,比如????xxx\plugins\org

近年来,Java语言的应用越来越广泛,而JDBCAPI是Java应用程序中与数据库交互的一种创造性方法,JDBC基于一种名为ODBC的开放数据库连接标准,使得Java应用程序能够连入任何数据库管理系统(DBMS)。其中,MySQL更是一款备受青睐的数据库管理系统。然而,连接MySQL数据库时,开发人员也会遇到一些常见问题,本文旨在介绍JDBCAPI连接M

随着Java的广泛应用,Java程序在连接数据库时经常会出现JDBC错误。JDBC(JavaDatabaseConnectivity)是Java中用于连接数据库的编程接口,因此,JDBC错误是在Java程序与数据库交互时遇到的一种错误。下面将介绍一些最常见的JDBC错误及如何解决和避免它们。ClassNotFoundException这是最常见的JDBC

一、说明在JDBC中,executeBatch这个方法可以将多条dml语句批量执行,效率比单条执行executeUpdate高很多,这是什么原理呢?在mysql和oracle中又是如何实现批量执行的呢?本文将给大家介绍这背后的原理。二、实验介绍本实验将通过以下三步进行a.记录jdbc在mysql中批量执行和单条执行的耗时b.记录jdbc在oracle中批量执行和单条执行的耗时c.记录oracleplsql批量执行和单条执行的耗时相关java和数据库版本如下:Java17,Mysql8,Oracl

一、数据库编程的必备条件编程语言,如Java,C、C++、Python等数据库,如Oracle,MySQL,SQLServer等数据库驱动包:不同的数据库,对应不同的编程语言提供了不同的数据库驱动包,如:MySQL提供了Java的驱动包mysql-connector-java,需要基于Java操作MySQL即需要该驱动包。同样的,要基于Java操作Oracle数据库则需要Oracle的数据库驱动包ojdbc。二、Java的数据库编程:JDBCJDBC,即JavaDatabaseConnectiv

目前,CSS 原生嵌套语法处于开发者试用状态,CSS 工作组正在制定相关规范,Chrome 浏览器预计将于 112 版本正式推出 CSS 原生嵌套功能。

JDBC基础入门概念JDBC(JavaDataBaseConnectivity,java数据库连接)是一种用于执行SQL语句的JavaAPI,可以为多种关系型数据库提供统一访问,它是由一组用Java语言编写的类和接口组成的。  JDBC规范定义接口,具体的实现由各大数据库厂商来实现。JDBC是Java访问数据库的标准规范,真正怎么操作数据库还需要具体的实现类,也就是数据库驱动。每个数据库厂商根据自家数据库的通信格式编写好自己数据库的驱动。所以我们只需要会调用J

Hibernate与JDBC的区别:抽象级别:Hibernate提供高级对象映射和查询生成,而JDBC需要手动编写代码。对象-关系映射:Hibernate映射Java对象和数据库表,而JDBC不提供此功能。查询生成:Hibernate使用HQL简化查询生成,而JDBC需要编写复杂的SQL查询。事务管理:Hibernate自动管理事务,而JDBC需要手动管理。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

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

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。
