jdbc常用コードまとめ
9534 ワード
普段はフレームワークを使うことが少なく、直接jdbcを書くことが少なく、急に書こうとしても書けないので、今はjdbcのコードをもう一度整理して、主にmysqlとoracleです.
jdbcには、次のステップがあります.
(1)データベースドライバのロード
(2)接続接続対象(connとする)
(3)Statementオブジェクトの作成(statとする)
(4)sql文を実行して結果セットを返す(rsとする)(クエリ)
(5)先ほど作成した順番で逆に閉じる:
1結果セットrsを閉じる.
②statオブジェクトを閉じる;
③connオブジェクトを閉じる
(6)異常処理を行うことを覚えておいて、主にSQLException
一、jdbcコードの例:
MySqlのjdbc:
oracleのjdbcとmysqlは似ていますが、データベースドライバとurlは異なります.
oracleのjdbc:
Statementオブジェクトを作成するには、PreparedStatementオブジェクトを使用してパフォーマンスを向上させることができます.
パラメータがある場合は、次のようになります.
PreparedStatementオブジェクトを使用する利点は、次のとおりです.
①
PreparedStatementはconn.prepareStatement(sql)のときにsql文を渡します.これにより、データベース側でプリコンパイル(プレースホルダを含む)が行われ、次回executeまたはexecuteQueryの場合、同じプリコンパイル文であればコンパイルする必要はありません.コンパイルされた文実行コードにパラメータを直接入力すれば(1つの涵数に相当)実行されます.これは、1つのConnectionで複数回実行されるプリコンパイル文のみがキャッシュされるというわけではありません.これは、PreparedStatementがデータベースのsql文をコンパイルする原理を利用して実現する優先的な方法です.
Statementはconn.createStatement()ではsql文を渡さず、executeまたはexecuteQueryでは死んだsql文を伝えます.これにより、同じ操作となるが、各操作のデータが異なるため、文全体をマッチングする機会は極めて小さく、マッチングはほとんど不可能である.
②
Statementを使って死んだ綴りを伝えるsql文は、実は安全ではなく、悪意のあるsql文が注入される危険があります.たとえば、String sql=「select*from t_user where name='zhangs'and passwd='zhangs 123」というように、悪意を持って「or 1=1」を注入すると、String sql=「select*from t_user where='zhangs'and passwd='zhangs 123'or 1=1」となり、パスワードが機能しなくなります.
次は、よく使用されるデータベースのデータベースドライバとurlです.後で検索するのに便利です.
二:jdbcドライバを登録する3つの方法:
mysql:
同じようにoracleの違いは3つ目です.
1において、不要である.新Instance()2では,システムの属性設定により3つのうち,比較的直感的に見える方式であり,対応するdbのjdbcドライバを登録し,まとめ:1,2の2つの方式を推奨する.理由:3コンパイル時に対応するlibをインポートする必要があります.1,2は必要ありません.补充:2の方式では、复数のjdbcドライバを同时に导入することができます.
参考資料:
http://www.cnblogs.com/Nbge/archive/2012/07/03/2574172.html
「ちょっと」ブログ、http://kin111.blog.51cto.com/738881/168295
http://yangfei520.blog.51cto.com/1041581/304484
jdbcには、次のステップがあります.
(1)データベースドライバのロード
(2)接続接続対象(connとする)
(3)Statementオブジェクトの作成(statとする)
(4)sql文を実行して結果セットを返す(rsとする)(クエリ)
(5)先ほど作成した順番で逆に閉じる:
1結果セットrsを閉じる.
②statオブジェクトを閉じる;
③connオブジェクトを閉じる
(6)異常処理を行うことを覚えておいて、主にSQLException
一、jdbcコードの例:
MySqlのjdbc:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Mysql {
public static void main(String[] args){
String driver = "com.mysql.jdbc.Driver";//
String url = "jdbc:mysql://localhost:3306/**";//**
String username = "root";//
String password = "root";//
Connection conn = null;
Statement stat = null;
ResultSet rs = null;
try{
Class.forName(driver);//
conn = DriverManager.getConnection(url,username,password);// Connection
stat = conn.createStatement();// Statement
String sql = "select userid,username,password from t_user";
rs = stat.executeQuery(sql);// sql
while(rs.next()){
int userid = rs.getInt("userid");
String name = rs.getString("username");
String pwd = rs.getString("password");
System.out.println("id:"+userid+"\tname:"+name+"\tpassword:"+pwd);
}
} catch(ClassNotFoundException e){
e.printStackTrace();
} catch(SQLException e){
e.printStackTrace();
} finally {
if(rs != null){
try{
rs.close();// rs
} catch(SQLException e){
e.printStackTrace();
} finally {
if(stat != null){
try{
stat.close();// stat
} catch(SQLException e){
e.printStackTrace();
} finally {
if(conn != null){}
try{
conn.close();// conn
} catch(SQLException e){
e.printStackTrace();
}
}
}
}
}
}
}
}
oracleのjdbcとmysqlは似ていますが、データベースドライバとurlは異なります.
String driver = "oracle.jdbc.driver.OracleDriver";//
String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";//orcl
oracleのjdbc:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Oracle {
public static void main(String[] args){
String driver = "oracle.jdbc.driver.OracleDriver";//
String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";//orcl
String username = "scott";
String password = "tiger";
Connection conn = null;
Statement stat = null;
ResultSet rs = null;
try{
Class.forName(driver);
conn = DriverManager.getConnection(url,username,password);
stat = conn.createStatement();
String sql = "select empno,ename from emp";
rs = stat.executeQuery(sql);
while(rs.next()){
String empno = rs.getString("empno");
String ename = rs.getString("ename");
System.out.println("\tempno:"+empno+"\tename:"+ename);
}
} catch(ClassNotFoundException e){
e.printStackTrace();
} catch(SQLException e){
e.printStackTrace();
} finally {
if(rs != null){
try{
rs.close();
} catch(SQLException e){
e.printStackTrace();
} finally {
if(stat != null){
try{
stat.close();
} catch(SQLException e){
e.printStackTrace();
} finally {
if(conn != null){}
try{
conn.close();
} catch(SQLException e){
e.printStackTrace();
}
}
}
}
}
}
}
}
Statementオブジェクトを作成するには、PreparedStatementオブジェクトを使用してパフォーマンスを向上させることができます.
PreparedStatement pst = null;
pst = conn.prepareStatement("select userid,username,password from t_user");
rs = pst.executeQuery();
パラメータがある場合は、次のようになります.
pst = conn.prepareStatement("select userid,username,password from t_user where username = ?");
pst.setString(1, "admin");// ,
rs = pst.executeQuery();
PreparedStatementオブジェクトを使用する利点は、次のとおりです.
①
PreparedStatementはconn.prepareStatement(sql)のときにsql文を渡します.これにより、データベース側でプリコンパイル(プレースホルダを含む)が行われ、次回executeまたはexecuteQueryの場合、同じプリコンパイル文であればコンパイルする必要はありません.コンパイルされた文実行コードにパラメータを直接入力すれば(1つの涵数に相当)実行されます.これは、1つのConnectionで複数回実行されるプリコンパイル文のみがキャッシュされるというわけではありません.これは、PreparedStatementがデータベースのsql文をコンパイルする原理を利用して実現する優先的な方法です.
Statementはconn.createStatement()ではsql文を渡さず、executeまたはexecuteQueryでは死んだsql文を伝えます.これにより、同じ操作となるが、各操作のデータが異なるため、文全体をマッチングする機会は極めて小さく、マッチングはほとんど不可能である.
②
Statementを使って死んだ綴りを伝えるsql文は、実は安全ではなく、悪意のあるsql文が注入される危険があります.たとえば、String sql=「select*from t_user where name='zhangs'and passwd='zhangs 123」というように、悪意を持って「or 1=1」を注入すると、String sql=「select*from t_user where='zhangs'and passwd='zhangs 123'or 1=1」となり、パスワードが機能しなくなります.
次は、よく使用されるデータベースのデータベースドライバとurlです.後で検索するのに便利です.
MySQL:
String Driver="com.mysql.jdbc.Driver"; //
String URL="jdbc:mysql://localhost:3306/db_name"; // URL,db_name
String Username="username"; //
String Password="password"; //
Class.forName(Driver).new Instance();
Connection con=DriverManager.getConnection(URL,Username,Password);
Microsoft SQL Server 2.0 (3 jar ):
String Driver="com.microsoft.jdbc.sqlserver.SQLServerDriver"; // SQL
String URL="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=db_name"; //db_name
String Username="username"; //
String Password="password"; //
Class.forName(Driver).new Instance(); //
Connection con=DriverManager.getConnection(URL,UserName,Password); //
Microsoft SQL Server 3.0 (1 jar ): //
String Driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"; // SQL
String URL="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=db_name"; //db_name
String Username="username"; //
String Password="password"; //
Class.forName(Driver).new Instance(); //
Connection con=DriverManager.getConnection(URL,UserName,Password); //
Sysbase:
String Driver="com.sybase.jdbc.SybDriver"; //
String URL="jdbc:Sysbase://localhost:5007/db_name"; //db_name
String Username="username"; //
String Password="password"; //
Class.forName(Driver).newInstance();
Connection con=DriverManager.getConnection(URL,Username,Password);
Oracle( thin ):
String Driver="oracle.jdbc.driver.OracleDriver"; //
String URL="jdbc:oracle:thin:@loaclhost:1521:orcl"; //orcl SID
String Username="username"; //
String Password="password"; //
Class.forName(Driver).newInstance(); //
Connection con=DriverManager.getConnection(URL,Username,Password);
PostgreSQL:
String Driver="org.postgresql.Driver"; //
String URL="jdbc:postgresql://localhost/db_name"; //db_name
String Username="username"; //
String Password="password"; //
Class.forName(Driver).newInstance();
Connection con=DriverManager.getConnection(URL,Username,Password);
DB2:
String Driver="com.ibm.db2.jdbc.app.DB2.Driver"; // DB2 Provider
//String Driver="com.ibm.db2.jdbc.net.DB2.Driver"; // DB2 Provider
String URL="jdbc:db2://localhost:5000/db_name"; //db_name
String Username="username"; //
String Password="password"; //
Class.forName(Driver).newInstance();
Connection con=DriverManager.getConnection(URL,Username,Password);
Informix:
String Driver="com.informix.jdbc.IfxDriver";
String URL="jdbc:Informix-sqli://localhost:1533/db_name:INFORMIXSER=myserver"; //db_name
String Username="username"; //
String Password="password"; //
Class.forName(Driver).newInstance();
Connection con=DriverManager.getConnection(URL,Username,Password);
JDBC-ODBC:
String Driver="sun.jdbc.odbc.JdbcOdbcDriver";
String URL="jdbc:odbc:dbsource"; //dbsource
String Username="username"; //
String Password="password"; //
Class.forName(Driver).newInstance();
Connection con=DriverManager.getConnection(URL,Username,Password);
二:jdbcドライバを登録する3つの方法:
mysql:
1. Class.forName(driver);
2. System.setProperty("jdbc.drivers", driver);
3. DriverManager.registerDriver(new com.mysql.jdbc.Driver());
同じようにoracleの違いは3つ目です.
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver())
1において、不要である.新Instance()2では,システムの属性設定により3つのうち,比較的直感的に見える方式であり,対応するdbのjdbcドライバを登録し,まとめ:1,2の2つの方式を推奨する.理由:3コンパイル時に対応するlibをインポートする必要があります.1,2は必要ありません.补充:2の方式では、复数のjdbcドライバを同时に导入することができます.
参考資料:
http://www.cnblogs.com/Nbge/archive/2012/07/03/2574172.html
「ちょっと」ブログ、http://kin111.blog.51cto.com/738881/168295
http://yangfei520.blog.51cto.com/1041581/304484