struts2小小專案 經驗總結(1) 在sturt2裡實現訪問資料庫
阿新 • • 發佈:2018-12-10
- 開始填坑了哈,這個東西其實還不完整,但是如果再不寫的話,前面那些坑可能要開始忘了,那就先寫著吧,各位如果有啥建議歡迎給我提,一起進步。
- 原始碼在這
- 這個專案我給他起了個名字--貓眼,哈哈,也就是一時興起,給了它個名字,它的作用是使用struts框架加資料庫建立一個小網站,客戶在進行登入之後,可以輸入一個事先準備好的“動漫之家”網中某一個漫畫的網址,然後伺服器就會去爬去這個 漫畫的內容,打包之後返回給使用者。
- 簡短潔說,現在來把我踩的坑分享給各位。
- 第一步,我最先做的是使用者登入這一塊,用的是微軟的sqlserver資料庫(以前做資料庫用的是mysql,但是都得接觸接觸是吧)和struts2(其實說白了這個專案就是struts2練手)。
- 首先呢得安裝資料庫。這是資料庫的安裝過程。
- 其次呢是讓java能夠使用sqlserver。實現的思路是這樣的,這個在前面也有說過,就是java載入sqlserver驅動,然後輸入使用者密碼 ,就可以了。具體是這樣操作的。
- 先得獲得資料庫驅動,驅動在這裡。
- 下載之後將驅動新增到專案的lib
- 輸入測試程式碼
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,可以繼續下一步
-
因為這個訪問資料庫的功能是要在strut2裡使用的,所以,要先新建一個struts2專案,具體怎麼新建看前文,這裡主要說明怎麼在strus2裡通過配置檔案訪問資料庫,這涉及到一個知識點,資原始檔的宣告。
-
要知道在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資料夾下。
-
然後呢,如果其他類就這樣直接訪問資料庫那封裝信也太差了,需要做一下封裝。
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; } }
-