一、配置程序——讓我們程序能找到數據庫的驅動jar包
1.把.jar文件復制到項目中去,整合的時候方便。
2.在eclipse項目右擊“構建路徑”--“配置構建路徑”--“庫”--“添加外部jar”--找到數據庫的驅動jar包--點擊確定。會在左側包資源管理器中出現“引用的庫”,在里面就能找到我們剛才導入的jar包。
二、與數據庫建立連接
1.加載數據訪問驅動
2.連接到數據庫
建立與MySQL數據庫的連接:
Class.forName("com.mysql.jdbc.Driver");//加載數據庫驅動
Connection conn = DriverManager.getConnectio ("jdbc:mysql://127.0.0.1:3306/mydb","賬號","密碼");
Statement state = conn.createStatement();//建立數據庫連接,獲得連接對象conn;
建立與SQL Server數據庫的連接
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//加載數據庫驅動
Connection conn = DriverManager.getConnectio ("jdbc:sqlsever://127.0.0.1:1433/DatabaseName=mydb","賬號","密碼");//建立數據庫連接,獲得連接對象conn;
其中mydb是表名。
三、查詢、插入、修改、刪除數據庫中的數據
建立表login
1.查詢數據
1.1使用Statement接口制作一個登錄驗證
package com.itnba.maya.login; import java.sql.*; import java.util.*; public class Test { public static void main(String[] args) throws Exception { Scanner sc = new Scanner(System.in); String zhang = sc.nextLine(); String pas = sc.nextLine(); Class.forName("com.mysql.jdbc.Driver"); Connection conn =DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/wang?characterEncoding=GBK", "root", "");//括號里面不能用空格 Statement state = conn.createStatement(); String sql = "select * from login where zhanghao='"+zhang+"' and password = '"+pas+"'"; ResultSet rs = state.executeQuery(sql);//獲得一個查詢結果集。 Boolean ok = rs.next(); if(ok) { System.out.println("恭喜您"+rs.getString(3)+"登錄成功"); } else { System.out.println("您輸入的賬號密碼有誤"); } conn.close(); } }
賬號密碼輸入正確時:輸入 zhangsan zhangsan 出現 “恭喜您張三登錄成功”
賬號密碼輸入錯誤時:輸入 zhangsan lisi 出現“您輸入的賬號密碼有誤”
但是上述方法會有“注入”問題出現,如輸入 asdf' or 1=1 #會出現登錄成功。輸入中的單引號會和前面的單引號形成配對,而#會注釋掉后面的語句,1=1隨時成立,就會出現登錄成功。
1.2使用PreparedStatement接口制作一個登錄驗證
public class Test { public static void main(String[] args) throws Exception { Scanner sc = new Scanner(System.in); String zhang = sc.nextLine(); String pas = sc.nextLine(); Class.forName("com.mysql.jdbc.Driver"); Connection conn =DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/wang?characterEncoding = GBK", "root", ""); String sql = "select * from login where zhanghao=? and password =?"; PreparedStatement state = conn.prepareStatement(sql); state.setString(1, zhang); state.setString(2,pas); ResultSet rs = state.executeQuery(); Boolean ok = rs.next(); if(ok) { System.out.println("恭喜您"+rs.getString(3)+"登錄成功"); } else { System.out.println("您輸入的賬號密碼有誤"); } conn.close(); }
賬號密碼輸入正確時:輸入 zhangsan zhangsan 出現 “恭喜您張三登錄成功”
賬號密碼輸入錯誤時:輸入 zhangsan lisi 出現“您輸入的賬號密碼有誤”
此種方式不會出現“注入” 問題。
2.向數據庫中插入數據
2.1使用Statement接口插入數據
public static void main(String[] args) throws Exception { Scanner sc = new Scanner(System.in); String zhang = sc.nextLine(); String pas = sc.nextLine(); Class.forName("com.mysql.jdbc.Driver"); Connection conn =DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/wang?characterEncoding = GBK", "root", ""); Statement state = conn.createStatement(); String sql = "insert into wang (zhanghao,password,name) values('zhangyu','zhangyu','張宇')"; state.executeUpdate(sql);//插入 刪除 更新數據時用update
conn.close();
}
運行結果:
2.2使用PreparedStatement接口插入數據
public static void main(String[] args) throws Exception { Class.forName("com.mysql.jdbc.Driver"); Connection conn =DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/wang?characterEncoding=GBK", "root", ""); String sql ="insert into login (zhanghao,password,name) values(?,?,?)"; PreparedStatement state = conn.prepareStatement(sql); state.setString(1, "zhangyu"); state.setString(2,"zhangyu"); state.setString(3,"張宇"); state.executeUpdate(); conn.close(); }
運行結果: