Java的資料庫連線
阿新 • • 發佈:2018-11-09
1、資料庫的連線
(1)select 查詢操作:
執行語句:ResultSet executeQuery(sql);
處理結果集:rs.next();rs.getXxx();
釋放資源:ResultSet.close();
(2)預處理物件 PreparedStatement:解決SQL注入問題
sql語句:? 佔位符;
獲得執行物件:prepareStatement(sql);
執行語句:setXxx(int, Obj);executeQuery();
釋放資源:PreparedStatement.close();
舉個例子:
package com.oracle.difficult;import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Scanner; public class demo04 { public static void main(String[] args) throws ClassNotFoundException, SQLException {//1、註冊驅動 Class.forName("com.mysql.jdbc.Driver"); //2、獲得連線 String url = "jdbc:mysql://localhost:3306/ceshi?characterEncoding=gbk"; String root = "root"; String password = "123"; Connection con = DriverManager.getConnection(url, root, password);//3、獲得語句執行平臺 Statement sta = con.createStatement(); //4、執行sql語句 Scanner sc = new Scanner(System.in); System.out.println("請輸入使用者名稱:"); String user = sc.next(); System.out.println("請輸入密碼:"); String pass = sc.next(); String sql = "select count(*) from user where uname = '"+user+"' "+"and pwd = '"+pass+"'"; //需要導包 import java.sql.ResultSet; ResultSet rs = sta.executeQuery(sql); /*//3、獲得語句執行平臺(預處理物件,解決SQL注入問題) String sql = "select count(*) from ceshi1 where id = ? and sname = ?"; PreparedStatement past = con.prepareStatement(sql); //4、執行SQL語句 Scanner sc = new Scanner(System.in); System.out.println("請輸入使用者名稱:"); int user = sc.nextInt(); System.out.println("請輸入密碼:"); String pass = sc.next(); past.setInt(1, user); past.setString(2, pass); ResultSet rs = past.executeQuery();*/ //5、處理結果集 int count = 0; while(rs.next()){ count = rs.getInt(1); } if(count > 0){ System.out.println("登入成功!!"); }else{ System.out.println("登入失敗"); } //6、釋放資源 rs.close(); sta.close(); con.close(); } }
SQL語句注入問題:
(3)JDBCUtils工具類:
將註冊驅動、獲得連線和釋放資源(方法過載)封裝起來;
package com.oracle.tools; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class JDBCUtils { public static Connection get() { //1、註冊驅動 try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } //2、獲得連線 String url = "jdbc:mysql://localhost:3306/ceshi?characterEncoding=gbk"; String root = "root"; String pwd = "123"; Connection conn = null; try { conn = DriverManager.getConnection(url,root,pwd); } catch (SQLException e) { e.printStackTrace(); } return conn; } public static void close(Connection conn,PreparedStatement pst){ if(pst != null){ try { pst.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn != null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } public static void close(Connection conn,PreparedStatement pst,ResultSet rs){ if(rs != null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if(pst != null){ try { pst.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn != null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
(4)專案分層(分包)
view層:檢視層,專案中的介面;
controller層:控制層,獲取介面上的資料;將要實現的功能交給業務層處理;
service層作用: 業務層, 功能的實現, 與controller控制層和資料訪問層DAO互動, 將對資料庫的操作交給DAO資料訪問層來處理
dao層作用: 資料訪問層, 用來操作資料庫表的資料
db資料庫: 這裡指MySQL
domain 實體包: 存放JavaBean
tools工具包:存放專案中使用到的工具類
test測試包: 存放專案功能測試的程式碼
各舉一個例子:
view層:
package com.oracle.view; import java.util.List; import java.util.Scanner; import com.oracle.controller.Sortcontroller; import com.oracle.controller.UserController; import com.oracle.domain.Sort; public class Mainview { private UserController userController = new UserController(); private Sortcontroller sortcontroller = new Sortcontroller(); public void mainShow(){ System.out.println("--------歡迎進入商城--------"); System.out.println("1、登陸"); System.out.println("2、註冊"); System.out.println("3、退出"); System.out.println("請輸入你的選擇"); } public void IndexShow(){ System.out.println("-------------首頁-------------"); System.out.println("1、新增分類"); System.out.println("2、修改分類"); System.out.println("3、刪除分類"); System.out.println("4、查詢所有分類"); System.out.println("5、返回上級選單"); System.out.println("請輸入你的選擇"); } //登入頁面 public void login(){ System.out.println("-----------登陸頁面-------------"); System.out.println("請輸入使用者名稱:"); Scanner sc = new Scanner(System.in); String username = sc.next(); System.out.println("請輸入密碼:"); String password = sc.next(); //呼叫Controller 層的登陸方法 int count = userController.login(username, password); if(count > 0){ System.out.println("登陸成功!!"); run2(); }else{ System.out.println("登陸失敗"); } } //註冊頁面 public void register(){ System.out.println("-----------註冊頁面-------------"); System.out.println("請輸入使用者名稱:"); Scanner sc = new Scanner(System.in); String username = sc.next(); System.out.println("請輸入密碼:"); String password = sc.next(); //呼叫Controller 層的註冊方法 System.out.println(userController.registerUser(username, password)); } //一級選單 public void run(){ Scanner sc = new Scanner(System.in); while(true){ mainShow(); int choose = sc.nextInt(); switch(choose){ case 1: //登陸 login(); break; case 2: register(); break; case 3: return; } } } //二級選單 public void run2(){ Scanner sc = new Scanner(System.in); while(true){ IndexShow(); int choose = sc.nextInt(); switch(choose){ case 1: add(); break; case 2: update(); break; case 3: break; case 4: getAll(); break; case 5: return; } } } //新增分類頁面 public void add(){ Scanner sc = new Scanner(System.in); System.out.println("--------------新增頁面------------"); System.out.println("請輸入你要新增的分類名稱"); String sname = sc.next(); //呼叫controller新增的方法 System.out.println(sortcontroller.addSort(sname)); } //查詢所有分類頁面 public void getAll(){ System.out.println("-------------查詢所有分類-------------"); //呼叫controller的查詢方法 List<Sort> list = sortcontroller.getAll(); System.out.println("分類編號\t分類名稱\t"); for(Sort s:list){ System.out.println(s.getSid()+"\t"+s.getSname()); } } //修改分類頁面 public void update(){ getAll(); System.out.println("請輸入要您要修改的分類編號"); Scanner sc = new Scanner(System.in); int id = sc.nextInt(); System.out.println("請輸入你要修改的分類名稱"); String sname = sc.next(); //呼叫Controller的修改方法 String mes = sortcontroller.updateSort(id, sname); System.out.println(mes); } }
controller層:
package com.oracle.controller; import com.oracle.domain.User; import com.oracle.service.UserService; public class UserController { //封裝前臺資料傳給後臺 //接收後臺資料傳給後臺 private UserService userService = new UserService(); public int login(String username,String password){ return userService.login(username, password); } public String registerUser(String username,String password){ return userService.registerUser(username, password); } /*public String register(String uname,String pwd){ User user = new User(); }*/ }
service層:
package com.oracle.service; import java.sql.SQLException; import com.oracle.dao.Userdao; import com.oracle.domain.User; public class UserService { //UserService層只能呼叫Dao層方法(相對) //view層呼叫controller層呼叫service層呼叫dao層 private Userdao userDao = new Userdao(); public int login(String username,String password){ int count = 0; try { count = userDao.login(username, password); } catch (SQLException e) { e.printStackTrace(); } return count; } //註冊方法 public String register(User user){ int row = 0; String mes = ""; try { row = userDao.register(user); } catch (SQLException e) { e.printStackTrace(); } if(row > 0){ mes = "註冊成功"; }else{ mes = "註冊失敗"; } return mes; } //----------- public String registerUser(String username,String password){ int count = 0; String mes =""; try { count = userDao.registerUser(username, password); } catch (SQLException e) { e.printStackTrace(); } if(count == 0){ int row = 0; try { row =userDao.updateUser(username, password); } catch (SQLException e) { e.printStackTrace(); } if(row > 0){ mes = "註冊成功!"; }else{ mes = "註冊失敗!"; } }else{ mes = "使用者名稱已存在!"; } return mes; } }
dao層:
package com.oracle.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.oracle.domain.User; import com.oracle.tools.JDBCUtils; public class Userdao { //登陸驗證使用者名稱或密碼是否正確 public int login(String username,String password) throws SQLException{ Connection conn = JDBCUtils.get(); String sql = "select count(*) from user where uname = ? and pwd = ?"; PreparedStatement pst = conn.prepareStatement(sql); pst.setString(1, username); pst.setString(2, password); ResultSet rs = pst.executeQuery(); int count = 0; while(rs.next()){ count=rs.getInt(1); } return count; } //註冊方法 //1註冊使用者 public int registerUser(String username,String password) throws SQLException{ Connection conn = JDBCUtils.get(); String sql = "select count(*) from user where uname = ? "; PreparedStatement pst = conn.prepareStatement(sql); pst.setString(1, username); ResultSet rs = pst.executeQuery(); int count = 0; while(rs.next()){ count=rs.getInt(1); } JDBCUtils.close(conn, pst, rs); return count; } //2新增使用者 public int updateUser(String username,String password) throws SQLException{ Connection conn = JDBCUtils.get(); String sql = "insert into user (uname,pwd) values (?,?)"; PreparedStatement pst = conn.prepareStatement(sql); pst.setString(1, username); pst.setString(2, password); int row = pst.executeUpdate(); JDBCUtils.close(conn, pst); return row; } public int register(User user) throws SQLException{ Connection conn = JDBCUtils.get(); String sql = "insert into user(uname,pwd) values(?,?)"; PreparedStatement pst = conn.prepareStatement(sql); pst.setString(1, user.getUsername()); pst.setString(2, user.getPassword()); int row = pst.executeUpdate(); JDBCUtils.close(conn, pst); return row; } }
domain層:
package com.oracle.domain; public class User { private int uid; private String username; private String password; public int getUid() { return uid; } public void setUid(int uid) { this.uid = uid; } public String toString() { return "User [uid=" + uid + ", username=" + username + ", password=" + password + "]"; } public User() { super(); } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
tools層:
package com.oracle.tools; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class JDBCUtils { public static Connection get() { //1、註冊驅動 try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } //2、獲得連線 String url = "jdbc:mysql://localhost:3306/ceshi?characterEncoding=gbk"; String root = "root"; String pwd = "123"; Connection conn = null; try { conn = DriverManager.getConnection(url,root,pwd); } catch (SQLException e) { e.printStackTrace(); } return conn; } public static void close(Connection conn,PreparedStatement pst){ if(pst != null){ try { pst.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn != null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } public static void close(Connection conn,PreparedStatement pst,ResultSet rs){ if(rs != null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if(pst != null){ try { pst.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn != null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
test層:
package com.oracle.test; import com.oracle.view.Mainview; public class test { public static void main(String[] args) { new Mainview().run(); } }