jdbc連接數據庫的四個對象
DriverManager 驅動類
DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建議使用
原因有2個:
> 導致驅動被注冊2次。
> 強烈依賴數據庫的驅動jar
解決辦法:
Class.forName("com.mysql.jdbc.Driver");
Connection 連接類
static Connection getConnection(String url, String user, String password)
試圖建立到給定數據庫 URL 的連接。
getConnection("jdbc:mysql://localhost:3306/day06", "root", "root");
URL:SUN公司與數據庫廠商之間的一種協議。
jdbc:mysql://localhost:3306/day06
協議 子協議 IP :端口號 數據庫
數據庫類型
mysql: jdbc:mysql://localhost:3306/day14 或者 jdbc:mysql:///day14(默認本機連接)
oracle: jdbc:oracle:thin:@localhost:1521:sid
getConnection(String url, Properties info)
Properties info = new Properties();//要參考數據庫文檔 可以用文件代替
info.setProperty("user", "root");//用戶名
info.setProperty("password","root");//密碼
//獲取連接對象返回值connection
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/day14?user=root&password=root");
Statement 操作數據庫類
//創建操作數據庫對象
Statement state=conn.createStatement();
String sql="sql語句";
Result rt= state.executeQuery(sql);//返回結果集
問題:存在sql注入
解決辦法
使用傳入參數方式 防止sql注入
Statement (PreparedStatement)//預編譯對象PreparedStatement
特點:
1.性能要高
2.會把sql語句先編譯
3.sql語句中的參數會發生變化,過濾掉用戶輸入的關鍵字。
Statement state= conn.preparedStatement();
String sql="select * from user where username=? and password=?";
Result rt= state.executeQuery(sql);//返回結果集
state.setString(1,username);
state.setString(2,password);
執行對象返回的結果
ResultSet executeQuery();
int executeUpdate();
boolean execute();
delete from users where id=?
ps.setInt(1,5);
ResultSet 結果集
//獲取數據
next();
getString();
getDouble();
getDate();
總結
利用四個核心對象編寫代碼
try{
//加載驅動
Class.forName("com.mysql.jdbc.Driver");
//創建連接Connection
Connection conn = DriverManager.getConnection("jdbc:mysql:///day06","root","abc");
//得到執行sql的statement對象
//conn.createStatement();
PreparedStatement ps = conn.prepareStatement("select * from users where name=? and pwd=?");
ps.setString(1,"tom");
ps.setString(2,"123");
//執行語句,並返回結果
ResultSet rs = ps.executeQuery();
//處理結果
while(rs.next()){
User u = new User();
u.setId(rs.getInt(1));
.... }
}
catch(Exception e){
e.printSt... }
finally{
//關閉資源
if(rs!=null)
{rs.close();}
if(ps!=null)
{ps.close();}
if(conn!=null)
{conn.close();}
}