[Javaツール、JDBC&DBUtilsを使用してMySQLデータベース]

使用JDBC

次のコードは、例外をキャッチされませんでした

A、JDBC SQL文の処理

1)なステートメント:完全なSQLコマンドを実行します

トラブル乏しい可読性ステッチ(一度のみ、動作は、文字列をPreparedStatmentを組み込むことによって実現することができる場合に推奨、ないプリコンパイルプロセス、この方法のように、複数の使用を、時間効率が低いです)

Connection conn = null; 
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
//建立连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=UTF8","root","password");
//发送SQL语句
Statement st = conn.createStatement();
int result=st.executeUpdate("INSERT INTO admin VALUES ('A2A','BBBBBB')");

2)PreparedStatment:パラメータを使用してSQLコマンドを実行します

安全で読める、プリコンパイルされた(複数回使用する場合、直接SQL文を使用してコンパイル)、より良いパフォーマンスが、状況はSQLインジェクションを防ぐことができます。

Connection conn = null;
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
//建立连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=UTF8","root","password");
//创建sql语句
PreparedStatement pre = conn.prepareStatement("select * from admin where name = ? and password = ?");
//给参数赋值
pre.setString(1,"name");
pre.setString(2,"password");
//发送sql语句,并获取sql语句返回集合
ResultSet rs = pre.executeQuery();
Admin admin = null;
while(rs.next()){
    admin = new Admin();
    admin.setName(rs.getString("name"));
    admin.setName(rs.getString("password"));
}
//全关,释放资源,可放在finally{}里面
pre.close();
rs.close();
conn.close();

第二には、CRUDを実装します

Connection conn = null; 
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
//建立连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=UTF8","root","password");
//发送SQL语句
Statement st = conn.createStatement();
//insert/update/delete/select
/返回1则代表数据库操作成功
int result=st.executeUpdate("INSERT INTO admin VALUES ('A2A','BBBBBB')");
//全关,释放资源,可放在finally{}里面
st.close();
conn.close();

第三に、チェックを達成するために(ResultSetの結果セットを取得します)

Connection conn = null; 
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
//建立连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=UTF8","root","password");

Statement st = conn.createStatement();
//查询结果集
ResultSet rs = stat.executeQuery("select * from admin");
//创建一个集合来存储查询到的值,如果只有一个则没有这个必要
List<Admin> admins = new ArrayList<>(); 
while (rs.next()){
	//每次循环的rs:结果集的一行
	String name= rs.getString("name");
	String passowrd= rs.getString("password");
	Admin admin = Admin(name,password);
	admins.add(admin);
}
//全关,释放资源,可放在finally{}里面
st.close();
rs.close();
conn.close();

四、JDBCリソースの解放

//全关,释放资源,可放在finally{}里面
st.close();
rs.close();
conn.close();

五、JDBCの概要

[外国チェーンの写真は、ソースステーションは、セキュリティチェーン機構を有していてもよい失敗ダンプ、ダウン直接アップロードした画像を保存することをお勧めします(IMG-uJUlToWR-1570172241634)(C:\ Users \ユーザー管理\のAppData \ローミング\ Typora \ typora-ユーザー画像\ 1558849968963.png)]

C3P0接続プールの設定

//在src,java类的主目录下,新建一个c3p0-config.xml
<c3p0-config>
    <!-- 默认配置,如果没有指定则使用这个配置 -->
    <default-config>
        <!-- 基本配置:填写数据库名、登陆账号密码 -->
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <!-- 此处回环地址后的/填写数据库名 -->
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/tangxz</property>
        <property name="user">root</property>
        <property name="password">5516</property>

        <!--扩展配置-->
        <property name="checkoutTimeout">30000</property>
        <property name="idleConnectionTestPeriod">30</property>
        <property name="initialPoolSize">10</property>
        <property name="maxIdleTime">30</property>
        <property name="maxPoolSize">100</property>
        <property name="minPoolSize">10</property>
        <property name="maxStatements">200</property>
    </default-config>

    <!-- 命名的配置 -->
    <named-config name="c3p0">
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/tangxz</property>
        <property name="useSSL">false</property>
        <property name="user">root</property>
        <property name="password">5516</property>

        <!-- 如果池中数据连接不够时一次增长多少个 -->
        <property name="acquireIncrement">5</property>
        <property name="initialPoolSize">20</property>
        <property name="minPoolSize">10</property>
        <property name="maxPoolSize">40</property>
        <property name="maxStatements">20</property>
        <property name="maxStatementsPerConnection">5</property>
    </named-config>
</c3p0-config>
//在一个类中,导入上面配置的连接池信息
//创建一个c3p0连接池
static ComboPooledDataSource ds= new ComboPooledDataSource();
//返回一个c3p0连接池中的连接
public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }

DBUtils使用C3P0

A、DBUtilsダウンロード:

http://commons.apache.org/proper/commons-dbutils/download_dbutils.cgi

二、DBUtilsプロフィール

読み取り操作のデータテーブル1.、彼はプログラマの操作を容易にするため、リスト、アレイ、設定されたJava他のセットに結果を変換することができます。

書き込み動作のデータテーブル2.は非常にシンプルになっています(ただ、SQL文を書きます)

主な方法:

DbUtilsカテゴリ:起動クラス

ResultSetHandlerインタフェース:インタフェース変換タイプ

MapListHandlerクラス:実装クラス、記録リストに変身

BeanListHandlerクラス:実装クラス、リスト記録は、オブジェクトタイプの記録に変換するJavaBean

クエリランナークラス:SQL文を実行するためのクラス

第三に、QreryRunnerカテゴリのDBUtilsを達成するために:

//dao层通过这句话获取连接池
    QueryRunner qr = new QueryRunner(C3p0Utils.getDataSource());

QreryRunnerクラス(org.apache.commons.dbutils.QueryRunner)が有意にSQLクエリを簡素化し、コアクラスのDbutilsの一つであり、符号化及びResultSetHandlerの大きな量を低減するために協力します。これは、次のメソッドが含まれています。

  1. クエリ(接続CONN、文字列のSQL、オブジェクトは[] paramsは、ResultSetHandler RSH):クエリで選択クエリを実行し、オブジェクト配列の値は、クエリの変位パラメータとして使用されます。
  2. クエリ(文字列のSQL、オブジェクト[] paramsは、ResultSetHandler RSH):なしデータベース接続処理自体は、クエリ内の選択を行うクエリは、オブジェクト配列の値は、クエリの変位パラメータとして使用されます。
  3. クエリ(接続CONN、文字列のSQL、ResultSetHandler RSH):選択クエリパラメータを実行する必要はありません。
  4. 更新(接続CONN、文字列のSQL、オブジェクト[] paramsが):(DML)の操作を、更新を挿入または削除するために使用されます。

第四に、追加と削除を変更して再検索を達成するために

1、によって

    public void insert() throws SQLException {
        String sql = "insert into admin(name,password) values(?,?)";
        String name = "aaaa";
        String password = "zzzz";
        qr.update(sql, name, password);
    }

2、削除

    public void delById(String name) throws SQLException {
        String sql = "delete from users where name = ?";
        qr.update(sql, name);
    }

3、変更

public void update(String name, user user) throws SQLException {
        String sql = "update users set name=? , password=? where name=?";
        qr.update(sql,user.getName(),user.getPassword(),name);
    }

4、チェック

//查一个
public user findById(String name) throws SQLException {
        String sql = "select * from admin where name = ?";
        return  qr.query(sql, new BeanHandler<>(user.class),name);
    }
    
//查多个
public List<user> findAll() throws SQLException {
        String sql = "select * from users";
        List<user> user = qr.query(sql, new BeanListHandler<user>(user.class));
        return user;
    }

公開された20元の記事 ウォンの賞賛1 ビュー569

おすすめ

転載: blog.csdn.net/weixin_42295814/article/details/102072920