天天看點

java基礎筆記整理1,Java開發環境搭建2-----------------資料庫連接配接-----------------------------

1,Java開發環境搭建

常用DOS指令

   d:           通路D盤

   cd + 檔案名    通路該檔案

cd..          通路上一級

cd\         傳回到目前盤符根目錄下

cla        清除螢幕

dir        顯示目前目錄下的檔案和子目錄資訊

Java開發環境(JDK)

如何校驗JDK安裝是否成功的方法。你無需了解為什麼要這麼做,隻需要嚴格按照下面的步驟操作即可:

1.      在鍵盤上按:WIN+R鍵,這時會彈出運作視窗;

2.      在運作視窗中輸入:CMD,按“确定”按鈕,這時會彈出DOS視窗;

3.      在DOS視窗中輸入:JDK安裝路徑\bin\java.exe。

一些常用的存儲機關:

1B(位元組) = 8bit

1KB = 1024B

1MB = 1024KB

1GB = 1024MB

1TB = 1024GB

1PB = 1024TB

需要注意:

(1)       Java 嚴格區分大小寫

(2)       main 是程式的主方法,程式入口

(3)       a++     ++,--運算符後置時,先使用變量a原有值參與運算操作,運算操作完成後,變量a的值自增1或者自減1;

++a        ++,--運算符前置時,先将變量a的值自增1或者自減1,然後使用更新後的新值參與運算操作

&&還具有短路的功能,即如果第一個表達式為false,則不再計算第二個表達式

(4)       【cmd下javac 錯誤: 編碼GBK的不可映射字元】

在cmd視窗下執行javac指令是,寫為javac -encoding utf-8 -d.  檔案名

-encoding utf-8 -d.

(5)       【輸出那裡,不要随便空格】

(6)       引用資料類型(如Scanner):

1導包:import java.util.Scanner;

2建立對象執行個體:Scanner sc = newScanner(System.in);

3調用方法:

                   int  i =sc.nextInt(); 用來接收控制台錄入的數字

         Strings = sc.next(); 用來接收控制台錄入的字元串

(7)      continue語句用在循環語句中,它的作用是終止(跳過)本次循環,執行下一次循環。break結束目前循環; contiune 跳出本次循環

(8)       switch 沒有break的話,會按順序一直執行

(9)       數字中包含7 :  String.valueOf(a).contains("7")

(10)   自定義的引用類型,每次new 都會在堆中開辟一片記憶體空間

(11)   數組 length     ArrayList 集合 .size( )  (資料任意的添加和删除) 字元串 .length( )

(12)   強制類型轉型 int a = 9; char b = (char)a;

1)        Eclipse 快捷鍵:

2)        内容輔助鍵  Alt+/

3)        自動補齊main方法  main 然後 Alt+/

4)        自動補齊輸出語句  syso 然後 Alt+/

5)        格式化Ctrl+Shift+f

6)        代碼區域右鍵 --Source – Format

7)        自動導包:Ctrl+Shift+o

8)        如果目前類在多個包中都存在,這時候,使用Ctrl+shift+o,進行選擇一個包導入即可。

9)        注釋

10)    單行注釋

11)    加注釋: 先選中需要注釋的内容,然後 Ctrl+/

12)    取消注釋:先選中需要取消注釋的内容, 然後 Ctrl+/

13)    多行注釋

14)    加注釋: 先選中需要注釋的内容,然後 Ctrl+Shift+/

15)    取消注釋:先選中需要取消注釋的内容, 然後 Ctrl+Shift+\

(13)    Ctrl + alt + 下箭頭    複制這行代碼

(14)                      //調用父類已經存在的功能使用super  super.showNum();    在子類重寫這個(和父類的方法是同一個名字)的方法時,在方法類加上(super.方法名())

(15)   多态:普通,抽象,接口。  運作的都是子類定義的方法

成員變量:定義和引用都看父類

方法運作看子類,但是父類也要有定義

靜态方法看父類     靜态屬于類,和對象無關

(16)   類實作(implements)接口,接口繼承(extends)多個接口

(17)   每個類都有它的構造方法

(18)   Ctrl +t  檢視繼承關系

(19)   Final 不可變  不能被繼承 除構造方法 都能修飾

(20)   類的方法中沒有 非靜态    就得加靜态static

在類裡面,如果方法沒有涉及到 成員變量,那就應該加靜态 static

靜态變量或方法 直接用接口或者類名 調用

(21)   導包  ctrl shift + o          類的全名帶着包

(22)   Protected 權限的類  中的方法 或 參數,隻能被子類在子類中用

(23)  我們想在類中定義一個靜态常量,通常使用public static final修飾的變量來完成定義。此時變量名用全部大寫

如:public static final 資料類型 變量名 = 值;

        public static final String COMPANY_NAME= "傳智播客";

使用類的靜态成員時,不需要建立對象,直接使用類名來通路即可

如:Company.COMPANY_NAME

(24)   Instanceof      如: obj  instanceof Person    判斷obj是否為Person 類型

(25)   Char  做運算都是先轉INT 如:97  = ‘A’   char 記得單引号 ‘  ’

(26)   StringBuffer 線程安全,但速度慢。是以,我們用StringBuilder  速度快,不管安全

(27)   String 的一些用法:

String1.contains("end")       String1中是否包含end

str1.indexOf(str2)             str1 中包含 str2 ,str2 在 str1 中的索引位置

(28)   正則:   ^ 表示“異或”    . 表示任意字元

Matches    split   replaceAll()

\\  表示把後面的 符号  轉為 正常表示的符号

如:. 在正則中表示任意字元,\\ . 則僅表示為一個點

(29)   有異常     ctrl 1

(30)   毫秒  1000毫秒 = 1秒

毫秒到天數的換算: 毫秒/1000/60(一分鐘60秒)/60(一小時60分鐘)/24(一天24小時)

轉換為毫秒值                   Date date = new Date();

                   long time = date.getTime();

(31)   轉 string      直接 String  s  =  I +“ ”   就可以了

也可以用                   String s3 = String.valueOf(a);

                                   String s2 = Integer.toString(i,2);

String 轉 char        char[] c= s.toCharArray();

String 轉 byte        “sfsfsf”.getBytes();

(32)   Integer  i = 127; Integer  j = 127; 這個,如果是127以内的數字,虛拟機不會新new 一個對象,而是讓 j = i

如果是128及以上的數字,就會重新 new 出一個對象

(33)   System.arraycopy(arr1, 2, arr2, 1,3);

複制數組:把 arr1 的元素從索引為2的開始,複制到arr2的索引1的後面,複制3個

(34)   集合存對象的時候:當列印array.get[i] 時,實際上列印的是array.get[i] 這個對象的.toString( )    我們可以在這個對象的類中,改寫toString( )

(35)    增強for循環     For( int I : arr )   周遊arr 數組,不改資料

(36)   泛型:像ArrayList<String>  arr = new ArrayList<String>(); 這種,後面需要指明類型的

(37)   疊代器:itrator   ollectioncoll = new ArrayList();   Iterator it = coll.iterator();

(38)   泛型的通配符  <?>     限定繼承的父類(上限) <?  Extends  Person >

限定該子類的父類(下限) <?  Super  Person >

(39)   數組操作:    int[]  i =  {12,4,34,67,3,43};

String  s = Arrays.toString(i);

(40)   Set<String> set = new HashSet<String>();

Set 無序,無重複元素,隻能用疊代器和增強for 循環來周遊

(41)   String  大小寫轉換     String start =sWord[i].substring(0, 1).toUpperCase();

                            Stringend = sWord[i].substring(1).toLowerCase();

(42)   可變參數(本質是數組),随便傳幾個:Function(int…a){    }

一個方法中隻能有一個可變參數;可變參數隻能放在參數清單最後

(43)   異常:     throw  new  RuntimeException("run");

RuntimeException 不用在方法的尾巴上加 throws RuntimeException了

如:public  static  int  get(int[]arr) throws Exception{    }

(44)   遞歸: 構造方法禁止遞歸

(45)   位元組流:換行:\r\n  (寫在上一句的結尾,或者,下一句的開頭)

字元流:換行:FileWriter   fw.newLine();  (具有平台無關性)

(46)   位元組流的異常處理:

                   FileOutputStreamfos = null;

                  try{

                            fos= new FileOutputStream("d:\\a.txt");       

                            fos.write('p');           

                            byte[]b = "asdf".getBytes();

                            fos.write(b);

                   }catch(IOException ex){

                            System.out.println(ex);

                            thrownew RuntimeException("檔案寫入失敗");

                   }finally{

                            try{

                                     if(fos!=null)

                                               fos.close();

                            }catch (IOException e) {

                                     thrownew RuntimeException("關閉資源失敗");

                            }

                   }

(47)   fos = newFileOutputStream("d:\\a.txt",true);          給該文本檔案續寫資料

fos.write('p');  

(48)            轉換嗎?轉換流。InputStreamReaderOutputStreamWriter

         高效嗎?緩沖區對象。BufferedXXX

InputStream

      FileInputStream

      BufferedInputStream

OuputStream

  FileOutputStream

  BufferedOuputStream

Writer

 OutputStreamWriter

     FileWriter                      à fw.flush();

     BufferedWriter

Reader

         InputStreamReader

    FileReader

         BufferedReader      à特有功能:br.readLine()  可以讀出檔案的一行

(49)   靜态方法不允許 通路 非靜态。靜态方法裡面不能寫,this,super

(50)   MySQL    auto_increment  自動增長

(51)    

         JDBC操作資料庫的步驟

         1.注冊驅動

             告知JVM使用的是哪一個資料庫的驅動

                   Class.forName("com.mysql.jdbc.Driver");

         2.獲得連接配接

            使用JDBC中的類,完成對MySQL資料庫的連接配接

                   url:"jdbc:mysql://localhost:3306/day07"

            Connection con = DriverManager.getConnection(url,username, password);

         3.獲得語句執行平台

           通過連接配接對象擷取對SQL語句的執行者對象

            PreparedStatement pst =  con.prepareStatement(sql);

         4.執行sql語句

           使用執行者對象,向資料庫執行SQL語句

           擷取到資料庫的執行後的結果

             ResultSet rs = pst.executeQuery();  或者 pst.executeUpdate();

         5.處理結果

                   rs.close();

                    stat.close();

                    con.close();

         6.釋放資源  一堆close()

使用 properties 配置時,該檔案要放在src 下面

(52)   Alt + shift + m  把抽取的代碼放進一個方法中

(53)   Ctrl + 2  調用的一個新的方法,左邊“  類名  自己取的名字“  會自動出現

(54)   用 resourceBundle 取properties 檔案中的值,properties 的key命名首字母小寫

塊編輯   alt + shift + a      全變大寫  Ctrl + shift + x   全變小寫  Ctrl + shift + y

(55)   Class  裡面的常量  命名要全部大寫

(56)   127.0.0.1   本機位址

(57)   Tomcat 部署

釋出:在底下server部分中,右鍵選  add and remove

(58)    

(59)    

(60)    

(61)    

(62)    

(63)    

(64)    

(65)    

(66)    

(67)    

2-----------------資料庫連接配接-----------------------------

JDBC(配置檔案àJDBCUtils類連接配接資料庫à使用JDBCUtils操作)

導包:mysql-connector-java-5.1.39-bin.jar

步驟一:建立Java項目,引入mysql的驅動包.

步驟二:編寫程式

步驟三:注冊驅動

步驟四:獲得連接配接

步驟五:執行SQL

步驟六:釋放資源

配置檔案 (jdbc.properties)

driverClassName=com.mysql.jdbc.Driver

url=jdbc:mysql:///day07

     (或url=jdbc:mysql://localhost:3306/base1)

username=root

password=root

步驟:注冊驅動à擷取連接配接à釋放驅動
JDBCUtils類
1,定義

static final String DRIVERCLASS;

    static final String URL;

    static final String USERNAME;

    static final String PASSWORD;

2,從jdbc.properties擷取資料

    static{

       //擷取資料

       ResourceBundle rb = ResourceBundle.getBundle("jdbc");

       DRIVERCLASS = rb.getString("driverClassName");

       URL = rb.getString("url");

       USERNAME = rb.getString("username");

       PASSWORD = rb.getString("password");  

    }

3,擷取驅動

static{

       try {

           //擷取驅動

           Class.forName(DRIVERCLASS);

       } catch (ClassNotFoundException e) {

           e.printStackTrace();

       }

    }

4,連接配接資料庫

    public static Connection getConnection(){

       try{

           //連接配接資料庫

           Return DriverManager.getConnection(URL,USERNAME,PASSWORD);

       }catch(Exception ex){

           System.out.println(ex+".222");

           throw new RuntimeException();

       }

    }

5,釋放連接配接,關閉

    public static void close(Connection con,PreparedStatement pre,ResultSet rs){

       conClose(con);

       preClose(pre);

       reClose(rs);

    }

    public static void conClose(Connection con){

       if(con != null){

           try{

              con.close();

           }catch(Exception ex){

              ex.printStackTrace();

           }

       }

    }

測試:

           Connection con = JDBCUtils.getConnection();

           String sql = "select * from student";

        PreparedStatement    pre = con.prepareStatement(sql);

           ResultSet re = pre.executeQuery();

           while(re.next()){

              System.out.println(re.getString("name"));

            }

連接配接池操作(常用連接配接池:DBCP,C3P0)

DBCP:(了解) apache組織

1.導入jar包:commons-dbcp-1.4.jar和commons-pool-1.5.6.jar

        2.使用api

            a.寫死

                    //建立連接配接池

                    BasicDataSource ds = new BasicDataSource();

                    //配置資訊

                    ds.setDriverClassName("com.mysql.jdbc.Driver");

                    ds.setUrl("jdbc:mysql:///day07");

                    ds.setUsername("root");

                    ds.setPassword("1234");

            b.配置檔案

                    實作編寫一個properties檔案

                    //存放配置檔案

                    Properties prop = new Properties();

                    prop.load(new FileInputStream("src/dbcp.properties"));

                    //設定

//prop.setProperty("driverClassName","com.mysql.jdbc.Driver"); 

     //建立連接配接池

      DataSource ds = new BasicDataSourceFactory().createDataSource(prop);

C3P0

導包: c3p0-0.9.1.2.jar

  ComboPooledDataSource bs = new ComboPooledDataSource("mydemo"); 

       Connection conn = bs.getConnection();

       String sql = "insert into student values(?,?)";

       PreparedStatement pre = conn.prepareStatement(sql);

       pre.setInt(1,8);

       pre.setString(2, "bob");

       int i = pre.executeUpdate();

       System.out.println(i);

配置檔案:c3p0-config.xml

<c3p0-config>

    <!-- 預設配置,如果沒有指定則使用這個配置 -->

    <default-config>

       <!-- 基本配置 -->

       <property name="driverClass">com.mysql.jdbc.Driver</property>

       <property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/base1</property>

       <property name="user">root</property>

       <property name="password">root</property>

       <!--擴充配置-->

       <property name="checkoutTimeout">30000</property>

       <property name="idleConnectionTestPeriod">30</property>

        <property name="initialPoolSize">10</property>

       <property name="maxIdleTime">30</property>

       <property name="maxPoolSize">100</property>

       <property name="minPoolSize">10</property>

       <property name="maxStatements">200</property>

    </default-config>

    <!-- 命名的配置 -->

    <named-config name="mydemo">

       <property name="driverClass">com.mysql.jdbc.Driver</property>

       <property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/base1</property>

       <property name="user">root</property>

       <property name="password">root</property>

       <!-- 如果池中資料連接配接不夠時一次增長多少個 -->

       <property name="acquireIncrement">5</property>

       <property name="initialPoolSize">20</property>

       <property name="minPoolSize">10</property>

       <property name="maxPoolSize">40</property>

       <property name="maxStatements">20</property>

       <property name="maxStatementsPerConnection">5</property>

    </named-config>

</c3p0-config>

DBUtils: QueryRunner  QueryRunner

update(String sql, Object... params) ,執行更新資料

query(String sql, ResultSetHandler<T> rsh, Object... params) ,執行查詢

         重要的結果集處理類:BeanHandler,BeanListHandler,MapListHandler,ScalarHandler

         closeQuietly(Connectionconn) 關閉連接配接,如果有異常try後不抛。

         是apache組織的一個工具類,jdbc的架構,更友善我們使用

         使用步驟:

                   1.導入jar包(commons-dbutils-1.4.jar)

                   2.建立一個queryrunner類

                     queryrunner作用:操作sql語句

                                     構造方法:

                                               new QueryRunner(Datasource ds);

                   3.編寫sql

                   4.執行sql

                            query(..):執行r操作

                            update(...):執行cud操作