使用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の大きな量を低減するために協力します。これは、次のメソッドが含まれています。
- クエリ(接続CONN、文字列のSQL、オブジェクトは[] paramsは、ResultSetHandler RSH):クエリで選択クエリを実行し、オブジェクト配列の値は、クエリの変位パラメータとして使用されます。
- クエリ(文字列のSQL、オブジェクト[] paramsは、ResultSetHandler RSH):なしデータベース接続処理自体は、クエリ内の選択を行うクエリは、オブジェクト配列の値は、クエリの変位パラメータとして使用されます。
- クエリ(接続CONN、文字列のSQL、ResultSetHandler RSH):選択クエリパラメータを実行する必要はありません。
- 更新(接続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;
}