1. 程式人生 > >struts2小小專案 經驗總結(1) 在sturt2裡實現訪問資料庫

struts2小小專案 經驗總結(1) 在sturt2裡實現訪問資料庫

  1. 開始填坑了哈,這個東西其實還不完整,但是如果再不寫的話,前面那些坑可能要開始忘了,那就先寫著吧,各位如果有啥建議歡迎給我提,一起進步。
  2. 原始碼在這
  3. 這個專案我給他起了個名字--貓眼,哈哈,也就是一時興起,給了它個名字,它的作用是使用struts框架加資料庫建立一個小網站,客戶在進行登入之後,可以輸入一個事先準備好的“動漫之家”網中某一個漫畫的網址,然後伺服器就會去爬去這個 漫畫的內容,打包之後返回給使用者。
  4. 簡短潔說,現在來把我踩的坑分享給各位。
  5. 第一步,我最先做的是使用者登入這一塊,用的是微軟的sqlserver資料庫(以前做資料庫用的是mysql,但是都得接觸接觸是吧)和struts2(其實說白了這個專案就是struts2練手)。
    1. 首先呢得安裝資料庫。這是資料庫的安裝過程。
    2. 其次呢是讓java能夠使用sqlserver。實現的思路是這樣的,這個在前面也有說過,就是java載入sqlserver驅動,然後輸入使用者密碼 ,就可以了。具體是這樣操作的。
      1. 先得獲得資料庫驅動,驅動在這裡
      2. 下載之後將驅動新增到專案的lib                                                                                  
                                 
      3. 輸入測試程式碼
        
        import java.sql.*;
        import java.util.HashMap;
        import java.util.Map;
        
        
        
        
        /**
         * Demo SearchNameAndPass
         *
         * @author lin
         * @date 2018/11/22
         */
        
        public class SqlTest  {
            public static void main(String[] srg) {
                String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";  //載入JDBC驅動
                String dbURL = "jdbc:sqlserver://localhost:1433; DatabaseName=homework_Submit_System";  //連線伺服器和資料庫test
                String userName = "root";  //預設使用者名稱
                String userPwd = "123456";  //密碼
                Connection dbConn;
                try {
                    Class.forName(driverName);
                    dbConn = DriverManager.getConnection(dbURL, userName, userPwd);
                    System.out.println("Connection Successful!");  //如果連線成功 控制檯輸出Connection Successful!
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        
        
        

        能成功看到輸出的話就ok,可以繼續下一步

      4. 因為這個訪問資料庫的功能是要在strut2裡使用的,所以,要先新建一個struts2專案,具體怎麼新建看前文,這裡主要說明怎麼在strus2裡通過配置檔案訪問資料庫,這涉及到一個知識點,資原始檔的宣告。

        1. 要知道在struts2裡直接使用./initSql.properties呀,./initSql.ini呀,../initSql.properties,../initSql.ini,就算你在檔案裡“看到了”initSql.properties“的的確確在那裡”,也是沒有辦法得到它的內容的。後來我的解決辦法是在struts.xml裡配置一個資原始檔,也就是

            <constant name="struts.custom.i18n.resources" value="initSql"/>

          配置檔案的名字就叫做iniSql.properties,內容為(具體什麼是什麼就不詳細講啦)

          driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
          url = jdbc:sqlserver://localhost:1433; DatabaseName=homework_Submit_System
          user =  root
          pass = 123456

                                                                                                                                                                              然後訪問資料庫的類是這樣的,具體的講解在程式碼裡邊

          package action.dao;
          
          import com.opensymphony.xwork2.ActionSupport;
          
          import java.sql.*;
          import java.util.HashMap;
          import java.util.Map;
          /**
           * Demo SearchNameAndPass
           *
           * @author lin
           * @date 2018/11/22
           */
          
          public class SearchNameAndPass extends ActionSupport {
              private String driver;
              private String  url;
              private String user;
              private String pass;
          
          /**     通過讀取屬性檔案來獲得屬性 */
              private void iniParam() throws Exception{
          
          //        依次讀取屬性檔案裡的各種屬性
                  driver =  getText("driver");
                  System.out.println(driver);
                  url=  getText( "url");
                  user =   getText("user");
                  pass = getText( "pass");
                  Class.forName(driver);
              }
          
          
          
          
          /**     在資料庫中搜索匹配的使用者名稱和密碼。 */
              public   Map<String, String >  search() throws Exception{
                  HashMap<String, String>nameAndPass = new HashMap<>(16);
                  try(
          //                PreparedStatement同樣是通過Connection物件來或獲得的。
          //                具體的構造方法是將要執行的sql語句傳進其構造方法裡。但是要將具體的資料用?代替
          //                然後再在具體執行sql語句的時候將?代替成具體的值
                          Connection connection = DriverManager.getConnection(url,user,pass);
                          PreparedStatement preparedStatement =
                                  connection.prepareStatement(" select *  from students  "))
                  {
                      ResultSet resultSet = preparedStatement.executeQuery();
          
                      //將在資料庫中所有的賬號密碼儲存在一個map中,以賬號為鍵,密碼為值
                      while (resultSet.next())
                      {
                          nameAndPass.put(resultSet.getString("account"), resultSet.getString("password1"));
                      }
                  }
                  return nameAndPass;
              }
          
          
              public SearchNameAndPass() throws Exception{
                  iniParam( );
              }
          //    public static void main(String []args) throws Exception{
          //        SearchNameAndPass preparedStatementTest  = new SearchNameAndPass();
          //        preparedStatementTest.iniParam("E:\\homeWorkSubmitSystem\\homeWorkSubmitSystem\\param.ini");
          //        Map<String, String > nameAndPass =  preparedStatementTest.search();
          //        System.out.println(nameAndPass.get("15363396874"));
          //    }
          }
          

          好了,資料庫的配置就是這樣,就是要記得要在配置檔案裡配置一下資原始檔,配置檔案所處的位置是在src資料夾下。 

        2. 然後呢,如果其他類就這樣直接訪問資料庫那封裝信也太差了,需要做一下封裝。 

          package action.dao;
          
          import java.util.Map;
          
          public class DbBean {
              private String name;
              private String pass;
          
              private String getName() {
                  return name;
              }
          
              private void setName(String name) {
                  this.name = name;
              }
          
              private String getPass() {
                  return pass;
              }
          
              private void setPass(String pass) {
                  this.pass = pass;
              }
          
          
              public DbBean(String name, String pass ){
                  setName(name);
                  setPass(pass);
              }
          
              public boolean  verifyLogin() throws  Exception{
          
                  if(getName()==null || getPass() == null){
                      return false;
                  }
          
                  SearchNameAndPass searchNameAndPass = new SearchNameAndPass();
          
                  Map<String, String> nameAndPass=  searchNameAndPass.search();
          
                  if(nameAndPass.get(getName()).equals(getPass())){
                      return true;
                  }
                      return false;
              }
          }