目次
PreparedStatement:SQLオブジェクトを実行します
ツールクラスを抽出し、構成ファイルを使用して接続プールを作成します
JDBCの概要
JDBC:Javaデータベース接続。その役割は、海外でJavaを介してデータベースを操作することです。基本的に、すべてのリレーショナルデータベースを操作するための一連のルール(インターフェイス)を定義し、各データベースメーカーがこの一連のインターフェイスを実装して提供します。データベースがjarパッケージを駆動し、次にこのインターフェイス(JDBC)を使用して、jarパッケージの実装クラスを駆動するようにプログラムします。
JDBCの実装手順
JDBCを実装する前に、まず(mysql-connection-java-5.1.37-bin)jarパッケージをインポートしてから、JDBCの6ステップの操作の実行を開始する必要があります。
jarパッケージリンク:
リンク:https
://pan.baidu.com/s/1LsyTxuoDGrOh2cqNt9UfaQ抽出コード:nfn8
- ドライバーを登録する
- データベース接続オブジェクト、接続を取得します
- SQLを定義する
- SQLステートメントを実行するオブジェクトを取得します。
- sqlを実行し、返された結果を受け取ります
- プロセス結果
- リソースを解放する
ケースコード:
public void testSave() throws Exception {
//1.注册驱动
DriverManager.registerDriver(new Driver());
String url = "jdbc:mysql://localhost:3306/student";
String username = "root";
String password = "root";
//2.获得连接
Connection connection = DriverManager.getConnection(url, username, password);
//3.获得语句执行者
Statement st = connection.createStatement();
//4.执行语句
String sql = "INSERT INTO tab_account VALUES(NULL , 'rose' , '1000')";
int count = st.executeUpdate(sql);
//5.处理结果
System.out.println(count);
//6.释放资源
st.close();
connection.close();
}
}
JDBCの関連APIの概要
DriverManager:ドライブ管理オブジェクト
効果:
- ドライバーを登録する
static void registerDriver(ドライバードライバー):
指定されたドライバーに登録するDriverManager
(動的ロードクラス)を使用してコードを記述します:Class.forName( "com.mysql.jdbc.Driver")。
ソースコードを表示すると、com.mysql.jdbc.Driverクラスに静的コードブロックがあることがわかります。
static{ try{ java.sql.DriverManager.registerDriver(new Driver); }catch(SQLException e){ throw new RuntimeException("Can't register driver!"); } }
MySQL5の後のドライバーjarパッケージは、ドライバーを登録するステップを省略できます
- データベース接続を取得する
方法:静的接続getConnection(String url、String user、String password)パラメータ:url:接続のパスを指定します構文:jdbc:mysql:// ipアドレス(ドメイン名):ポート番号/データベース名詳細:ローカルのmysqlサーバーに接続していて、mysqlサーバーのデフォルトポートが3306の場合、URLは省略できます:jdbc:mysql:// database nameユーザー:データベースユーザー名パスワード:データベースパスワード
接続:データベース接続オブジェクト
効果:
- 実行されたSQLオブジェクトを取得します
ステートメントcreateStatement()
PreparedStatement prepareStatement(String sql)
- 経営業務
トランザクションの開始:setAutoCommit(boolean autoCommit)は、このメソッドを呼び出してパラメーターをfalseに設定します。つまり、トランザクションを開始します。
トランザクションをコミットします:commit()
トランザクションをロールバックします:rollback()
ステートメント:SQLオブジェクトを実行します
boolean execute(String sql):任意のSQLを実行できます
int executeUpdate(String sql):DML(追加、削除、変更)ステートメントを実行します。戻り値は影響を受ける行数であり、DMLステートメントが正常に実行されたかどうかを判断します。
ResultSet executeQuery(String SQL):DQL(クエリ)ステートメントを実行します
ResultSet:結果セットオブジェクト
boolean next():カーソルが1行下に移動して、最後の行の現在の終わり(データがあるかどうか)があるかどうかを判断します。ある場合はfalseを返し、ない場合はtrueを返します。 getXxxx(パラメータ):データを取得します
Xxx:getInt(int / String)、getString(int / String)などのデータタイプを表します パラメータ
intは、1から始まる列の番号を表します。 文字列:列の名前を表します 注意
使用手順
カーソルを1行下に移動します データがあるかどうかを判断する データを取得する
PreparedStatement:SQLオブジェクトを実行します
{SQLインジェクションを防ぎ、より効率的に}
SQLインジェクションの問題:SQLをスプライシングする場合、一部のSQL特殊キーワードが文字列のスプライシングに関与し、セキュリティ上の問題が発生します。 SQLインジェクションの問題を解決し、PreparedStatemetオブジェクトを使用して解決します プリコンパイルされたSQL:プレースホルダーとしてのパラメーターの使用? ステップ
ドライバjarパッケージmysql-connector-java-5.1.37-bin.jarをインポートします ドライバーを登録する データベース接続オブジェクトConnectionを取得します SQLを定義する
注:SQLパラメーターは?をプレースホルダーとして使用します。----> select * from user where username =?and password =? 割当?
メソッド---> setXxx(パラメーター1、パラメーター2)
パラメータ1:位置のコーディングは1から始まります パラメータ2 :?の値 SQLを実行し、返された結果を受け取ります。パラメーターを渡す必要はありません。 プロセス結果 リソースを解放する
JDBC初期パッケージケースコード:
構成ファイル:
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///student
username=root
password=root
package com.james.Utils;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;
public class JDBCUtils {
private static String url;
private static String user;
private static String password;
private static String driver;
static{
//读取资源文件获取值
try {
//1 创建Properties集合类
Properties properties = new Properties();
//2 获取src路径下的文件的方式----->classLoader 类加载器
ClassLoader classLoader=JDBCUtils.class.getClassLoader();
URL res=classLoader.getResource("jdbc.properties");
// 获取配置文件路径
String path=res.getPath();
//3 加载文件
properties.load(new FileReader(path));
//4 获取数据
url=properties.getProperty("url");
user=properties.getProperty("user");
password=properties.getProperty("password");
//5 注册驱动
driver=properties.getProperty("driver");
} catch (IOException e) {
e.printStackTrace();
}
}
/*
* 获取连接对象的方法
* */
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url,user,password);
}
Druid接続プール
接続プールはデータベースを格納するためのコンテナです。システムが初期化されると、コンテナが作成されます。コンテナは一部の接続オブジェクトに適用されます。ユーザーがデータベースにアクセスすると、接続オブジェクトがコンテナから取得されます。ユーザーがデータベースにアクセスすると、接続オブジェクトはに返されます。コンテナ。
利点:
- リソースを節約し、サーバーの負荷を軽減します
- 接続の再利用性と効率的なユーザーアクセスを改善します
ハードコードされた方法:
- jarパッケージのリンクをインポートします。
https://pan.baidu.com/s/1lHnZJ-uPbEVwOuodV8poHA
抽出コード:n04c
- オブジェクトを作成する
- データベース接続の4つの基本パラメーター(ドライバー、URL、ユーザー名、パスワード)を構成します
- その他のパラメータ(接続の最大数、アイドル接続の最小数、接続を取得するための最大待機時間)を設定します
- 接続プールオブジェクトを介して接続を取得します
- 接続を使用する
- 接続を呼び出すと、close()は接続を返すことができます
public class DRUIDDemo {
@Test
//硬编码,所有的配置都写到java代码中
public void test1() throws SQLException {
//1. 创建对象
DruidDataSource ds = new DruidDataSource();
//2. 设置数据库连接的4个基本参数(驱动,url,username,password)
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql:///student");
ds.setUsername("root");
ds.setPassword("1234");
//3. 设置其他的参数(最大连接的数量,最小连接空闲数量,获取连接最大等待时间)
ds.setMaxActive(10);
ds.setMinIdle(2);
ds.setMaxWait(2000);
//获取11个连接 ,会出现重复的连接
for (int i = 1; i <12 ; i++) {
//4. 通过连接池对象获取连接
Connection conn = ds.getConnection();
//5. 使用连接
System.out.println(conn);
if (i%7==0){
//6. 调用连接close()就可以归还连接
conn.close();
}
}
}
}
ツールクラスを抽出し、構成ファイルを使用して接続プールを作成します
ツール:
package com.james.b_utils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
/**
* 连接池的工具类
* 1.获得连接
* 2.释放资源(归还连接)
*/
public class DruidUtils {
//1.准备数据源
private static DataSource dataSource = null ;
//2.static静态代码块初始化连接池
static {
try {
//加载流
InputStream is = DruidUtils.class.getClassLoader().getResourceAsStream("db.properties");
//创建properties
Properties properties = new Properties();
//加载数据
properties.load(is);
//实例化连接池
dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 从池中获得连接
* @return
* @throws SQLException
*/
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
}
xml構成ファイル(srcフォルダーの下):
#此处的properties 的key不能瞎写
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///student
username=root
password=root
initialSize=3
maxActive=10
maxWait=3000
package com.james.b_utils;
import java.sql.Connection;
import java.sql.SQLException;
public class TestDemo {
public static void main(String[] args) throws SQLException {
for(int i = 1 ; i <= 11 ; i++ ){
Connection connection = DruidUtils.getConnection();
System.out.println(i+"@@"+connection);
if(i==5){
//归还第五个连接
connection.close();//连接池对close方法都进行重写了
}
}
}
}