JDBCの詳細はこれを見れば十分です。(java復習day 12)
34507 ワード
一、JDBC基礎
1、基礎概念:java言語操作データベース(javaデータベース接続)の本質:公式定義のセットはすべての関係型データベースを操作する規則、すなわちインターフェースである。各データベースメーカーはこのインターフェースを実現して、データベース駆動jarパッケージを提供しています。直接にこのインターフェースを使ってプログラムできます。本当に実行されるコードはjarパッケージの実現タイプです。
二、データベース接続池
1、接続池の基礎概念:一つの容器(集合)、データベース接続の容器を保存し、システムが初期化された後、容器が作成され、いくつかの接続対象を申請します。ユーザーがデータベースにアクセスする時、容器から接続先を取得し、ユーザーが訪問した後、接続先を容器に返却します。
実現:標準インターフェース、DataSource
C 3 P 0
SpringフレームはJDBCの簡単パッケージに対して、JDBCTemapleオブジェクトを簡単化したJDBCの開発を提供しています。
ステップ:1、jarパッケージを導入する2、jdbcTemplateオブジェクトを作成し、データベースDataSource JdbcTemplate=new JdbcTemplate(ds)に依存する。
3、jdbcTemplateを呼び出す方法でCRUDの操作を完成する。
1、基礎概念:java言語操作データベース(javaデータベース接続)の本質:公式定義のセットはすべての関係型データベースを操作する規則、すなわちインターフェースである。各データベースメーカーはこのインターフェースを実現して、データベース駆動jarパッケージを提供しています。直接にこのインターフェースを使ってプログラムできます。本当に実行されるコードはjarパッケージの実現タイプです。
public static void main(String[] args) throws Execption{
//1、 jar
//2、
Class.forName("com.mysql.jdbc.Driver");
//3、
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db","root","password");
//4、 sql
String sql = "select * from stu";
//5、 sql Statement
Statement stmt = conn.createStatement();
//6、 sql
String result = stmt.excuteUpdate(sql);
//7、
System.out.println(result);
//8、
stmt.close();
conn.close();
}
2、JDBC類詳細Driver Manager:駆動管理対象 /*
1、 : jar
Drivermanager
mysql5 jar
*/
static void registerDriver(Driver driver)
// , , com.mysql.jdbc.Driver
Class.forName("com.mysql.jdbc.Driver");
/*
2、
*/
static Connection getConnection(String url,String user,String password)
Connection:データベース接続対象 /*
1、 : sql
*/
Statement createStatement();
PrepareStatement prepareStatement(String sql);
/*
2、
*/
:setAutoCommit(boolean autoCommit) , false,
:commit()
:rollback()
Sttement:sqlを実行する対象 /*
1、 sql
*/
boolean execute(String sql), sql
// : , DML ( 0, ; , )
int executeUpdate(String sql), DML(insert、update、delete) ,DDL(create、alter、drop)
ResultSet executeQuery(String sql), DQL(select)
Result Set:結果セットの対象 next() //
getXxx( ) //
Xxx: : int getInt(),String getString()
:
int: , 1 :getString(1)
String: :getDouble("balance")
:
while(rs.next()){
//
int id = rs.getInt(1);
String name = rs.getString("name");
double balance = rs.getDouble(3);
System.out.println(id+name+balance);
}
PreparedStetement:sqlのオブジェクト作用を実行する:SQL注入効率が高いのを防ぐことができます。 1、SQL : sql , sql ,
: ,abc123 :a' or 'a' = 'a
sql:select * from user where username = 'abc123' and password = a' or 'a' = 'a;
2、 sql : PrepareStatement
3、 SQL: ?
4、 :
jar
Connection
sql
sql:select * from user where username = ? and password = ?;
?
:setXxx( 1, 2)
1:? 1
2:?
sql, , sql
3、JDBC制御事務はConnectionオブジェクトを使用して事務のオープンを管理する。トランザクション:set AutoCommt、この方法を呼び出してパラメータをfalseと設定する。即ち、ビジネスをオープンする(sqlを実行する前に事務をオープンする)提出する。commt(すべてのSqlが提出事務を実行する時)ロールバックする。二、データベース接続池
1、接続池の基礎概念:一つの容器(集合)、データベース接続の容器を保存し、システムが初期化された後、容器が作成され、いくつかの接続対象を申請します。ユーザーがデータベースにアクセスする時、容器から接続先を取得し、ユーザーが訪問した後、接続先を容器に返却します。
実現:標準インターフェース、DataSource
// ,
geConnection()
// ( )
Connection.close()
よくある接続池:C 3 P 0、DruidC 3 P 0
jar c3p0、mchange-commons-java、mysql-connector-java
:
:c3p0.properties c3p0-config.xml
:src
CombopooledDataSource
getConnection
/*
c3p0 11
*/
public static void main(String[] args) throw SQLException{
//1、 DataSource
DataSource ds = new ComboPooledDataSource();
//2、
for(int i = 1; i<= 11; i++){
Connection conn = ds.getConnection();
System.out.println(i+":"+conn);
if(i = 5){
conn.close(); // 5 , ,
}
}
}
ドルイド jar druid
(properties , )
: DruidDataSourceFactory
:getConnection
/*
druid 、
*/
public static void main(String[] args) throw SQLException{
//1、 jar
//2、
//3、
Properties pro = new Properties();
InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
//4、
DataSource ds = DruidDateSourceFactory.createDataSource(pro);
//5、
Connection conn = ds.getConnection();
//6、
System.out.println(conn);
}
JDBCUtils工具類を定義する JDBCUtils
,
1、 :
2、
3、
public static void main(String[] args){
//1、 DataSource
private static DataSource ds;
static{
try{
//1、
Properties pro = new Properties();
InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
//2、
DataSource ds = DruidDateSourceFactory.createDataSource(pro);
}catch(IOException e){
e.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}
}
/*
*/
public static void getConnection(String[] args) throw SQLException{
return ds.getConnection();
}
/*
*/
public static void close(String stmt,Connection conn){
close(null,stmt,conn);
}
public static void close(ResultSet rs, String stmt,Connection conn){
if{rs!= null{
try{
rs.close();
}catch(SQLException e){
e.printStackTrace();
}
}
if{stmt != null{
try{
stmt.close();
}catch(SQLException e){
e.printStackTrace();
}
}
if{conn!= null{
try{
conn.close();
}catch(SQLException e){
e.printStackTrace();
}
}
}
/*
*/
public static DataSource getDataSource(){
return ds;
}
}
三、JDBCTemplateSpringフレームはJDBCの簡単パッケージに対して、JDBCTemapleオブジェクトを簡単化したJDBCの開発を提供しています。
ステップ:1、jarパッケージを導入する2、jdbcTemplateオブジェクトを作成し、データベースDataSource JdbcTemplate=new JdbcTemplate(ds)に依存する。
3、jdbcTemplateを呼び出す方法でCRUDの操作を完成する。
update(): DML ,
//
queryForMap(): map
key, value, map
// Map , Map List
queryForList(): List
//query RowMapper, BeanPropertyRowMapper , JavaBean
//new BeanPropertyRowMapper( .class)
query(): javaBean
//
queryForMap():
/*
JDBCTemplate 、
*/
public static void main(String[] ars){
// jar
// JDBCTemplate
JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
//
String sql = "update account set balance = 5000 where id = ?";
int count = template.update(sql,3);
System.out.println(count);
}
/*
queryForMap()
queryForList()
*/
public static void main(String[] ars){
// jar
// JDBCTemplate
JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
//
String sql = "select * from emp";
List<Map<String,Object>> list = template.queryForList(sql);
for(Map<String,Object> stringObjectMap : list){
System.out.println(stringObjectMap);
}
}
/*
query(): javaBean
*/
public static void main(String[] ars){
// jar
// JDBCTemplate
JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
//
String sql = "select * from emp";
List<Emp> list = template.query(sql,new BeanPropertyRowMapper<Emp>(Emp.class));
for(Emp emp : list){
System.out.println(emp);
}
}