您好,登錄后才能下訂單哦!
1.JDBC的設計
從一開始,Java技術開發人員就意識到了Java在數據庫應用方面的巨大潛力。從1995年開始,他們就致力于擴展Java標準類庫,使之可以運用SQL訪問數據庫。他們最初希望通過擴展Java,就可以讓人們“純”用Java語言與任何數據庫進行通信。但是,他們很快發現這是一項無法完成的任務:因為業界存在許多不同的數據庫,且他們所使用的協議也各不相同。盡管許多數據庫供應商都表示支持Java提供一套數據庫訪問的標準網絡協議,但是每一家企業都希望Java能采用自己的網絡協議。
所有的數據庫供應商和工具開發商都認為,如果Java能夠為SQL訪問提供一套“純”JavaAPI,同時提供一個驅動管理器,以允許第三方驅動程序可以連接到特定的數據庫,那它就會顯得非常有用。這樣,這樣數據庫供應商就可以提供自己的驅動程序,將其插入到驅動管理器中。這將成為一種向驅動管理器注冊第三方驅動程序的簡單機制。
這種接口組織方式遵循了微軟公司非常成功的ODBC模式,ODBC為C語言訪問數據庫提供了一套編程接口。JDBC和ODBC都基于同一個思想:根據API編寫的程序都可以與驅動管理器進行通信,而驅動管理器則通過驅動程序與實際的數據庫進行通信。
所有這些都意味著JDBC API是大部分程序員不得不使用的接口。
JDBC:java database connectivity SUN公司提供的一套操作數據庫的標準規范。
JDBC與數據庫驅動的關系:接口與實現的關系。
JDBC規范(掌握四個核心對象):
DriverManager:用于注冊驅動
Connection:表示與數據庫創建的連接
Statement:操作數據庫sql語句的對象
ResultSet:結果集或一張虛擬表
開發一個JDBC程序的準備工作:
JDBC規范在哪里:
JDK中:
java.sql.*;
javax.sql.*;
數據庫廠商提供的驅動:jar文件
*.jar
2.開發一個JDBC程序
實現查詢數據庫中的數據顯示在java的控制臺中
1、創建數據庫表,并向表中添加測試數據
2、創建java project項目,添加數據庫驅動
3、實現JDBC操作
//1、注冊驅動
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//2、創建連接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb1","root","password");
//3、得到執行sql語句的Statement對象
Statement stmt = conn.createStatement();
//4、執行sql語句,并返回結果
String sql = "select * from user";
ResultSet rs = stmt.executeQuery(sql);
//5、處理結果
while(rs.next()){
System.out.println(rs.getObject(1));
......
}
//6、關閉資源
rs.close();
stmt.close();
3.JDBC常用的類和接口詳解
1、java.sql.Drivermanager類 : 創建連接
a、注冊驅動
DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建議使用
原因有2個:
導致驅動被注冊2次
強烈依賴數據庫的驅動jar
解決辦法:
Class.forName("com.mysql.jdbc.Driver");
b、與數據庫建立連接
static Connection getConnection(String url, String user, String password) //試圖建立到給定數據庫 URL 的連接。
getConnection("jdbc:mysql://localhost:3306/day06", "root", "password");
URL:SUN公司與數據庫廠商之間的一種協議。
jdbc:mysql://localhost:3306/mydb1
協議 子協議 IP :端口號 數據庫
mysql: jdbc:mysql://localhost:3306/mydb1或者 jdbc:mysql:///mydb1(默認本機連接)
oracle: jdbc:oracle:thin:@localhost:1521:sid
Properties info = new Properties(); //要參考數據庫文檔
info.setProperty("user", "root");
info.setProperty("password","password");
getConnection(String url, Properties info)
getConnection(String url)
DriverManager.getConnection("jdbc:mysql://localhost:3306/day14?user=root&password=password");
2、java.sql.Connection接口:一個連接
接口的實現在數據庫驅動中。所有與數據庫交互都是基于連接對象的。
Statement createStatement(); //創建操作sql語句的對象
3、java.sql.Statement接口:操作sql語句,并返回相應結果的對象(小貨車)
接口的實現在數據庫驅動中。用于執行靜態SQL語句并返回它所生成結果的對象。
ResultSet executeQuery(String sql); //根據查詢語句返回結果集。只能執行select語句
int executeUpdate(String sql); //根據執行的DML(insert update delete)語句,返回受影響的行數
boolean execute(String sql); //此方法可以執行任意sql語句。返回boolean值,表示是否返回ResultSet結果集。僅當執行select語句,且有返回結果時返回true, 其它語句都返回false;無錫看婦科的醫院 http://www.ytsgfk120.com/
4、java.sql.ResultSet接口:結果集(客戶端存表數據的對象)
a、封裝結果集的
提供一個游標,默認游標指向結果集第一行之前
調用一次next(),游標向下移動一行
提供一些get方法
封裝數據的方法
Object getObject(int columnIndex); //根據序號取值,索引從1開始
Object getObject(String ColomnName); //根據列名取值。
將結果集中的數據封裝到javaBean中
java的數據類型與數據庫中的類型的關系
java 數據庫
byte tityint
short smallint
int int
long bigint
float float
double double
String char varchar
Date date
boolean next(); //將光標從當前位置向下移動一行
int getInt(int colIndex); //以int形式獲取ResultSet結果集當前行指定列號值
int getInt(String colLabel); //以int形式獲取ResultSet結果集當前行指定列名值
float getFloat(int colIndex); //以float形式獲取ResultSet結果集當前行指定列號值
float getFloat(String colLabel); //以float形式獲取ResultSet結果集當前行指定列名值
String getString(int colIndex); //以String 形式獲取ResultSet結果集當前行指定列號值
String getString(String colLabel); //以String形式獲取ResultSet結果集當前行指定列名值
Date getDate(int columnIndex);
Date getDate(String columnName);
void close(); //關閉ResultSet 對象
b、可移動游標的方法
boolean next(); //將光標從當前位置向前移一行。
boolean previous(); //將光標移動到此 ResultSet 對象的上一行。
boolean absolute(int row); //參數是當前行的索引,從1開始根據行的索引定位移動的指定索引行。
void afterLast(); //將光標移動到末尾,正好位于最后一行之后。
void beforeFirst(); //將光標移動到開頭,正好位于第一行之前。
4.SQL注入問題:preparedStatement
preparedStatement:預編譯對象, 是Statement對象的子類
特點:
性能要高
會把sql語句先編譯
sql語句中的參數會發生變化,過濾掉用戶輸入的關鍵字
PreparedStatement ps = null;
ResultSet rs = null;
try{
conn = DBUtils.getConnection();
String sql = "select * from user where name=? and password=?";
ps = conn.prepareStatement(sql); //注:創建此對象時,要把sql語句先放進去
//給預編譯sql語句賦值
ps.setString(1, name);
ps.setString(2, password);
rs = ps.executeQuery();
}catch(Exception e){
e.printStackTrace();
}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。