1.建完工程後,右擊工程,new,新建一個文件夾Folder,裝jar包,
2.將下載好的驅動包打開,找到jar文件,CTRL+C,選中裝jar包的文件夾,CTRL+V,
3.選中添加的jar,右鍵,Build Path,Add to Build Path
4.新建一個包,再新建一個自定義類
5.註冊驅動:Class.forName("com.mysql.jdbc.Driver");throws異常
6.得到連接,
數據庫的url:jdbc:mysql://localhost:3306/數據庫名
//解決中文亂碼:在url中數據庫名後加?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE
Connection con = DriverManager.getConnection("");
導包,java.sql,throws異常
7.得到語句執行平臺
經過鏈接對象獲取對SQL語句的執行者對象
Statement stm=連接對象.createStatement();
8.執行sql語句
使用執行者對象,向數據庫執行SQL語句
獲取到數據庫的執行後的結果
例子:java
package com.oricle.Demo01; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; public class Demo01 { public static void main(String[] args) throws ClassNotFoundException, SQLException { /* 1.建完工程後,右擊工程,new,新建一個文件夾Folder,裝jar包, * 2.將下載好的驅動包打開,找到jar文件,CTRL+C,選中裝jar包的文件夾,CTRL+V, * 3.選中添加的jar,右鍵,Build Path,Add to Build Path * 4.新建一個包,再新建一個自定義類 * 5.註冊驅動:Class.forName("com.mysql.jdbc.Driver");throws異常 * 6.得到連接, * 數據庫的url:jdbc:mysql://localhost:3306/數據庫名 * //解決中文亂碼:在url中數據庫名後加?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE * Connection con = DriverManager.getConnection(""); * 導包,java.sql,throws異常 * 7.得到語句執行平臺 經過鏈接對象獲取對SQL語句的執行者對象 Statement stm=連接對象.createStatement(); 8.執行sql語句 使用執行者對象,向數據庫執行SQL語句 獲取到數據庫的執行後的結果 * */ //1註冊驅動 Class.forName("com.mysql.jdbc.Driver"); //2得到連接 String url="jdbc:mysql://localhost:3306/fuxi?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE"; String user="root"; String password="123456"; Connection con=DriverManager.getConnection(url, user, password); //3得到語句執行平臺 Statement stm=con.createStatement(); //4.執行語句 String sql="delete from sort where sid=5"; stm.execute(sql);//增刪改 //5.針對於查詢操做 //6,先開的後關 stm.close(); con.close(); } }
用集合來裝從數據庫裏面獲取的數據mysql
自定義一個類,類名和數據庫名一致sql
package com.oricle.demo01; public class sort { private int sid; private String sname; private String sdesc; public int getSid() { return sid; } public void setSid(int sid) { this.sid = sid; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } public String getSdesc() { return sdesc; } public void setSdesc(String sdesc) { this.sdesc = sdesc; } @Override public String toString() { return "sort [sid=" + sid + ", sname=" + sname + ", sdesc=" + sdesc + "]"; } }
測試類:數據庫
package com.oricle.demo01; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; public class demo03 { public static void main(String[] args) throws ClassNotFoundException, SQLException { // 1註冊驅動 Class.forName("com.mysql.jdbc.Driver"); // 2獲取鏈接 String url="jdbc:mysql://localhost:3306/fuxi"; String user="root"; String password="123456"; Connection co=DriverManager.getConnection(url, user, password); // 3得到預處理對象 Statement s=co.createStatement(); // 4 SQL語句佔位符設置實際參數 // 5執行SQL語句 String sql="select *from sort"; ResultSet rs=s.executeQuery(sql); //6處理結果集 ArrayList<sort> as=new ArrayList<sort>();//建立集合用來裝新建sort對象 //遍歷 while(rs.next()){ sort so=new sort();//自定義一個類,類名和數據庫名一致,建立對象 so.setSid(rs.getInt("sid"));//把獲取當前行的分類id利用set方法存入對象的成員變量中, so.setSname(rs.getString("sname")); so.setSdesc(rs.getString("sdesc")); as.add(so);//把該對象添加到集合as中 } System.out.println(as);//打印集合裏面內容 //7釋放資源 rs.close(); s.close(); co.close(); } }
註冊驅動服務器
代碼:Class.forName("com.mysql.jdbc.Driver");
JDBC規範定義驅動接口:java.sql.Driver,MySql驅動包提供了實現類:com.mysql.jdbc.Driveride
DriverManager工具類,提供註冊驅動的方法 registerDriver(),方法的參數是java.sql.Driver,因此咱們能夠經過以下語句進行註冊:工具
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
以上代碼不推薦使用,存在兩方面不足測試
一般開發咱們使用Class.forName() 加載一個使用字符串描述的驅動類。ui
若是使用Class.forName()將類加載到內存,該類的靜態代碼將自動執行。this
查詢com.mysql.jdbc.Driver源碼,發現Driver類「主動」將本身進行註冊,重複
public class Driver extends NonRegisteringDriver implements java.sql.Driver { static { try { java.sql.DriverManager.registerDriver(new Driver());//註冊 } catch (SQLException E) { throw new RuntimeException("Can't register driver!"); } } …… }
得到連接
代碼:Connection con = DriverManager.getConnection (「jdbc:mysql://localhost:3306/mydb」,」root」,」root」);
獲取鏈接須要方法
DriverManager.getConnection(url,username,password);
三個參數分別表示,url 須要鏈接數據庫的位置(網址) user用戶名 password 密碼
下面是mysql的url:
jdbc:mysql://localhost:3306/mydb
JDBC規定url的格式由三部分組成,每一個部分中間使用冒號分隔。
第一部分是jdbc,這是固定的;
第二部分是數據庫名稱,那麼鏈接mysql數據庫,第二部分固然是mysql了;
第三部分是由數據庫廠商規定的,咱們須要瞭解每一個數據庫廠商的要求,mysql的第三部分分別由數據庫服務器的IP地址(localhost)、端口號(3306),以及DATABASE名稱(mydb)組成。
得到語句執行平臺
String sql = "某SQL語句";
獲取Statement語句執行平臺:Statement stmt = con.createStatement();
經常使用方法: int executeUpdate(String sql); --執行insert update delete語句. ResultSet executeQuery(String sql); --執行select語句. boolean execute(String sql); --執行select返回true 執行其餘的語句返回false.
SQL注入問題
假設有登陸案例SQL語句以下:
SELECT * FROM 用戶表 WHERE NAME = 用戶輸入的用戶名 AND PASSWORD = 用戶輸的密碼;
此時,當用戶輸入正確的帳號與密碼後,查詢到了信息則讓用戶登陸。可是當用戶輸入的帳號爲XXX 密碼爲:XXX’ OR ‘a’=’a時,則真正執行的代碼變爲:
SELECT * FROM 用戶表 WHERE NAME = ‘XXX’ AND PASSWORD =’ XXX’ OR ’a’=’a’;
此時,上述查詢語句時永遠能夠查詢出結果的。那麼用戶就直接登陸成功了,顯然咱們不但願看到這樣的結果,這即是SQL注入問題。
爲此,咱們使用PreparedStatement來解決對應的問題。
package com.oricle.demo01; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Scanner; public class demo05 { public static void main(String[] args) throws ClassNotFoundException, SQLException { // TODO Auto-generated method stub Class.forName("com.mysql.jdbc.Driver"); String url="jdbc:mysql://localhost:3306/fuxi"; String user="root"; String password="123456"; Connection co=DriverManager.getConnection(url, user, password); Scanner sc=new Scanner(System.in); System.out.println("請輸入用戶名:"); String uname=sc.next(); System.out.println("請輸入密碼:"); String pwd=sc.next(); String sql="select * from user where uname=? and pwd=?"; PreparedStatement pst=co.prepareStatement(sql); pst.setString(1, uname); pst.setString(2,pwd); ResultSet rs=pst.executeQuery(); while(rs.next()){ System.out.println(rs.getString("uname")+"..."+rs.getString("pwd")); } rs.close(); pst.close(); co.close(); } }
?佔位符,插入數據時,用逗號隔開
String sql = "insert into sort(sid,sname) values(?,?)";