<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] # 簡介 * JDBC-ODBC橋接技術 | |---在windows中有ODBC技術,ODBC是指開放數據庫連接,可以利用JDBC間接操作ODBC技術,從而實現數據庫連接 * JDBC直接連接 | |---直接由不同的數據庫生產商提供指定的數據庫連接驅動程序實現,此類方式由于JDBC直接操作數據庫,所以性能是最好的 * JDBC網絡連接 | |--- 使用專門的數據庫網絡連接指令進行指定主機的數據庫操作, JDBC是接口,驅動是接口的實現,沒有驅動將無法完成數據庫連接,從而不能操作數據庫! 每個數據庫廠商都需要提供自己的驅動,用來連接自己公司的數據庫,也就是說驅動一般都由數據庫生成廠商提供。 # 開發步驟 1. 注冊驅動. 2. 獲得連接. 3. 獲得語句執行平臺 4. 執行sql語句 5. 處理結果 6. 釋放資源. 創建lib目錄,用于存放當前項目需要的所有jar包 ## 注冊驅動 代碼: ~~~ Class.forName("com.mysql.jdbc.Driver"); ~~~ JDBC規范定義驅動接口:java.sql.Driver,MySql驅動包提供了實現類:com.mysql.jdbc.Driver DriverManager工具類,提供注冊驅動的方法 registerDriver(),方法的參數是java.sql.Driver,所以我們可以通過如下語句進行注冊: ~~~ DriverManager.registerDriver(new com.mysql.jdbc.Driver()); ~~~ 以上代碼不推薦使用,存在兩方面不足 1. 硬編碼,后期不易于程序擴展和維護 2. 驅動被注冊兩次。 通常開發我們使用Class.forName() 加載一個使用字符串描述的驅動類。 如果使用Class.forName()將類加載到內存,該類的靜態代碼將自動執行。 通過查詢com.mysql.jdbc.Driver源碼,我們發現Driver類“主動”將自己進行注冊 ~~~ public class Driver extends NonRegisteringDriver implements java.sql.Driver { static { try { java.sql.DriverManager.registerDriver(new Driver()); } catch (SQLException E) { throw new RuntimeException("Can't register driver!"); } } …… } ~~~ 驅動注冊了兩次.我們只需要將靜態代碼塊執行一次,類被加載到內存中會執行靜態代碼塊,并且只執行一次. 現在只需要將類加載到內存中即可: 方式1: ★Class.forName("全限定名");//包名+類名 com.mysql.jdbc.Driver 方式2: 類名.class; 方式3: 對象.getClass(); ## 獲得鏈接 代碼: ~~~ Connection con = DriverManager.getConnection(“jdbc:mysql://localhost:3306/mydb”,”root”,”root”); ~~~ 獲取連接需要方法 DriverManager.getConnection(url,username,password),三個參數分別表示,url 需要連接數據庫的位置(網址) user用戶名 password 密碼 url比較復雜,下面是mysql的url: jdbc:mysql://localhost:3306/mydb JDBC規定url的格式由三部分組成,每個部分中間使用冒號分隔。 * 第一部分是jdbc,這是固定的; * 第二部分是數據庫名稱,那么連接mysql數據庫,第二部分當然是mysql了; * 第三部分是由數據庫廠商規定的,我們需要了解每個數據庫廠商的要求,mysql的第三部分分別由數據庫服務器的IP地址(localhost)、端口號(3306),以及DATABASE名稱(mydb)組成。 ## 獲得語句執行平臺 ~~~ String sql = "某SQL語句"; ~~~ 獲取Statement語句執行平臺: ~~~ Statement stmt = con.createStatement(); ~~~ 常用方法: * int executeUpdate(String sql); --執行insert update delete語句. * ResultSet executeQuery(String sql); --執行select語句. * boolean execute(String sql); --執行select返回true 執行其他的語句返回false. ## 處理結果集(執行insert、update、delete無需處理) ResultSet實際上就是一張二維的表格, 我們可以調用其boolean next()方法指向某行記錄, 當第一次調用next()方法時,便指向第一行記錄的位置, 這時就可以使用ResultSet提供的getXXX(int col)方法 (與索引從0開始不同個,列從1開始)來獲取指定列的數據: ~~~ rs.next();//指向第一行 rs.getInt(1);//獲取第一行第一列的數據 ~~~ 常用方法: * Object getObject(int index) / Object getObject(String name) 獲得任意對象 * String getString(int index) / Object getObject(String name) 獲得字符串 * int getInt(int index) / Object getObject(String name) 獲得整形 * double getDouble(int index) / Object getObject(String name) 獲得雙精度浮點型 ## 釋放資源 與IO流一樣,使用后的東西都需要關閉! 關閉的順序是先得到的后關閉,后得到的先關閉。 ~~~ rs.close(); stmt.close(); con.close(); ~~~ # 預處理 ## 預處理對象 使用PreparedStatement預處理對象時,建議每條sql語句所有的實際參數,都使用逗號分隔。 ~~~ String sql = "insert into sort(sid,sname) values(?,?)";; PreparedStatement預處理對象代碼: PreparedStatement psmt = conn.prepareStatement(sql) ~~~ 常用方法: 執行SQL語句: ~~~ int executeUpdate(); --執行insert update delete語句. ResultSet executeQuery(); --執行select語句. boolean execute(); --執行select返回true 執行其他的語句返回false. ~~~ 設置實際參數 `void setXxx(int index, Xxx xx) 將指定參數設置為給定Java的xx值。在將此值發送到數據庫時,驅動程序將它轉換成一個 SQL Xxx類型值。` 例如: setString(2, "家用電器") 把SQL語句中第2個位置的占位符? 替換成實際參數 "家用電器" ## 預處理對象executeUpdate方法 通過預處理對象的executeUpdate方法,完成記錄的insert\update\delete語句的執行。操作格式統一如下: 1. 注冊驅動 2. 獲取連接 3. 獲取預處理對象 4. SQL語句占位符設置實際參數 5. 執行SQL語句 6. 釋放資源 ### 插入記錄:insert 實現向分類表中插入指定的新分類 ~~~ public void demo01() throws Exception { // 1注冊驅動 Class.forName("com.mysql.jdbc.Driver"); // 2獲取連接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "root"); // 3獲得預處理對象 String sql = "insert into sort(sname) values(?)"; PreparedStatement stat = conn.prepareStatement(sql); // 4 SQL語句占位符設置實際參數 stat.setString(1, "奢侈品"); // 5執行SQL語句 int line = stat.executeUpdate(); System.out.println("新添加記錄數:" + line); // 6釋放資源 stat.close(); conn.close(); } ~~~ ### 更新記錄:update 實現更新分類表中指定分類ID所對應記錄的分類名稱 ~~~ public void demo02() throws Exception { // 1注冊驅動 Class.forName("com.mysql.jdbc.Driver"); // 2獲取連接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "root"); // 3獲得預處理對象中 String sql = "update sort set sname=? where sid=?"; PreparedStatement stat = conn.prepareStatement(sql); // 4 SQL語句占位符設置實際參數 stat.setString(1, "數碼產品"); stat.setInt(2, 1); // 5執行SQL語句 int line = stat.executeUpdate(); System.out.println("更新記錄數:" + line); // 6釋放資源 stat.close(); conn.close(); } ~~~ ### 刪除記錄:delete 實現刪除分類表中指定分類ID的記錄 ~~~ public void demo03() throws Exception { // 1注冊驅動 Class.forName("com.mysql.jdbc.Driver"); // 2獲取連接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "root"); // 3獲得預處理對象 String sql = "delete from sort where sid=?"; PreparedStatement stat = conn.prepareStatement(sql); // 4 SQL語句占位符設置實際參數 stat.setInt(1, 1); // 5執行SQL語句 int line = stat.executeUpdate(); System.out.println("刪除記錄數:" + line); // 6釋放資源 stat.close(); conn.close(); } ~~~ ## 預處理對象executeQuery方法 通過預處理對象的executeQuery方法,完成記錄的select語句的執行。操作格式統一如下: 1. 注冊驅動 2. 獲取連接 3. 獲取預處理對象 4. SQL語句占位符設置實際參數 5. 執行SQL語句 6. 處理結果集(遍歷結果集合) 7. 釋放資源 ### 查詢記錄:select * 實現查詢分類表中指定分類名稱的記錄 ~~~ public void demo05() throws Exception { // 1注冊驅動 Class.forName("com.mysql.jdbc.Driver"); // 2獲取連接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "root"); // 3獲得預處理對象 String sql = "select * from sort where sname=?"; PreparedStatement stat = conn.prepareStatement(sql); // 4 SQL語句占位符設置實際參數 stat.setString(1, "奢侈品"); // 5執行SQL語句 ResultSet rs = stat.executeQuery(); // 6處理結果集(遍歷結果集合) while( rs.next() ){ //獲取當前行的分類ID String sid = rs.getString("sid");//方法參數為數據庫表中的列名 //獲取當前行的分類名稱 String sname = rs.getString("sname"); //顯示數據 System.out.println(sid+"-----"+sname); } // 7釋放資源 rs.close(); stat.close(); conn.close(); } ~~~ # properties配置文件 開發中獲得連接的4個參數(驅動、URL、用戶名、密碼)通常都存在配置文件中,方便后期維護,程序如果需要更換數據庫,只需要修改配置文件即可 通常情況下,我們習慣使用properties文件,此文件我們將做如下要求: 1. 文件位置:任意,建議src下 2. 文件名稱:任意,擴展名為properties 3. 文件內容:一行一組數據,格式是“key=value”. a) key命名自定義,如果是多個單詞,習慣使用點分隔。例如:jdbc.driver b) value值不支持中文,如果需要使用非英文字符,將進行unicode轉換。 * 創建配置文件 在項目跟目錄下,創建文件,輸入“db.properties”文件名。 文件中的內容 ~~~ driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/mydb user=root password=root ~~~ * 加載配置文件:Properties對象 對應properties文件處理,開發中也使用Properties對象進行。我們將采用加載properties文件獲得流,然后使用Properties對象進行處理。 JDBCUtils.java中編寫代碼 ~~~ public class JDBCUtils { private static String driver; private static String url; private static String user; private static String password; // 靜態代碼塊 static { try { // 1 使用Properties處理流 // 使用load()方法加載指定的流 Properties props = new Properties(); Reader is = new FileReader("db.properties"); props.load(is); // 2 使用getProperty(key),通過key獲得需要的值, driver = props.getProperty("driver"); url = props.getProperty("url"); user = props.getProperty("user"); password = props.getProperty("password"); } catch (Exception e) { throw new RuntimeException(e); } } /** * 獲得連接 */ public static Connection getConnection() { try { // 1 注冊驅動 Class.forName(driver); // 2 獲得連接 Connection conn = DriverManager.getConnection(url, user, password); return conn; } catch (Exception e) { throw new RuntimeException(e); } } } ~~~ ## ResourceBundle 工具 ~~~ //jdk提供的工具類加載properties文件,名字db.properties的后綴可以省略 ResourceBundle bundle = ResourceBundle.getBundle("db"); //通過key獲得需要的值 String driver = bundle.getString("driver"); System.out.println(driver); ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看