java連線資料庫
文章目錄
一、建立一個maven專案
1.建立專案
2.選擇maven=》next
3.自定義組名專案名=》next
4.finish
二、在maven中央倉庫中找到5.1.17的資料庫依賴
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.17</version>
</dependency>
</dependencies>
出現此,表明下載完成
三、編寫程式碼連線資料庫
1.建立Test類測試
2.準備工作
要連線的資料庫
連線資料庫的ip=》在虛擬機器中檢視網路連線
埠號=》Navicat新建MySQL
使用者名稱:root
密碼:123456
3.編寫程式碼
1.方法一,在篩選時會發生sql注入
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
//連線資料庫需要知道,資料庫的ip地址(master),埠號,使用者名稱,密碼 要連線的資料庫名稱
//通過視覺化工具Navicat,找到埠號,通過虛擬機器中的網路連線知道ip
//ip:192.168.154.110 port:3306 username:root password:123456
public class Test {
public static void main(String[] args) throws Exception{
//1.以對映方式載入Driver,丟擲異常
Class.forName("com.mysql.jdbc.Driver");
//2.建立連線
Connection conn = DriverManager.getConnection("jdbc:mysql://master:3306/shujuku", "root", "123456");
//3.執行sql語句
//方式一
//3.1.1建立sqlyu語句
String sql="select * from student;";
//3.1.2通過建立的連線物件建立執行器,用來執行sql語句
Statement statement = conn.createStatement();
//3.1.3通過執行器執行sql語句,得到結果集
ResultSet rs = statement.executeQuery(sql);
//3.1.4將執行的結果在控制檯顯示
while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
String sex = rs.getString("sex");
System.out.println(id+"--"+name+"--"+age+"--"+sex);
}
conn.close();
statement.close();
rs.close();
}
}
如果sql語句為篩選語句,在該引數的時候可能會注入sql語句,導致結果出錯
sql注入
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
//連線資料庫需要知道,資料庫的ip地址(master),埠號,使用者名稱,密碼 要連線的資料庫名稱
//通過視覺化工具Navicat,找到埠號,通過虛擬機器中的網路連線知道ip
//ip:192.168.154.110 port:3306 username:root password:123456
public class Test {
public static void main(String[] args) throws Exception{
//1.以對映方式載入Driver,丟擲異常
Class.forName("com.mysql.jdbc.Driver");
//2.建立連線
Connection conn = DriverManager.getConnection("jdbc:mysql://master:3306/shujuku", "root", "123456");
//3.執行sql語句
//方式一
//3.1.1建立sqlyu語句
//查詢ID為1005的學生資訊,本來是作為引數,加在sql後面,但是如果加上其他語句,
// 不僅僅是引數,還會成為sql的邏輯語句
String studntid="1005 or 1=1";
String sql="select * from student where id="+studntid;
//3.1.2通過建立的連線物件建立執行器,用來執行sql語句
Statement statement = conn.createStatement();
//3.1.3通過執行器執行sql語句,得到結果集
ResultSet rs = statement.executeQuery(sql);
//3.1.4將執行的結果在控制檯顯示
while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
String sex = rs.getString("sex");
System.out.println(id+"--"+name+"--"+age+"--"+sex);
}
conn.close();
statement.close();
rs.close();
}
}
結果不是查詢不到,而是遍歷輸出,因為or 1= 1的存在使得每條結果都成立
2.方法二
避免sql注入
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class Test1 {
public static void main(String[] args) throws Exception{
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://master:3306/shujuku", "root", "123456");
String sql="select * from student where id=?";//給上佔位符
//方式二
//3.2.1建立執行器
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1,"1005 or 1=1");//第一個佔位符給1,如果有兩個問號,設定兩次,下次給2
//3.2.1執行語句,獲取結果集
ResultSet rs = ps.executeQuery();
while (rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
String sex = rs.getString("sex");
System.out.println(id+"--"+name+"--"+age+"--"+sex);
}
conn.close();
ps.close();
rs.close();
}
}
未查詢到
四、總結
格式1建立Statement步驟 1.反射載入Driver Class.forName("com.mysql.jdbc.Driver"); 2.建立連線 Connection conn=DriverManager.getConnection("jdbc:mysql://master:3306/shujia","root","123456"); 3.1.建立執行器 Statement statement=conn.createStatement(); 3.2.執行器執行sql語句 獲得ResultSet結果集 String sql="select * from student"; ResultSet rs = statement.executeQuery(sql); 4.解析結果 while(rs.next()){ int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); String sex = rs.getString("sex"); System.out.println(id+"-"+name+"-"+age+"-"+sex); } 5.關閉 rs.close(); statement.close(); conn.close(); 格式2preparedStatement步驟 1.反射載入Driver Class.forName("com.mysql.jdbc.Driver"); 2.建立連線 Connection conn=DriverManager.getConnection("jdbc:mysql://master:3306/shujia","root","123456"); 3.1建立執行器 首先載入sql的格式 //使用PreparedStatement執行器執行sql時,引數通過?進行傳遞 String sql="select * from student where id=?"; PreparedStatement ps = conn.prepareStatement(sql); //通過ps.set資料型別(index,value)進行賦值 ps.setString(1,"1055"); 3.2通過執行器執行sql 獲取結果集 ResultSet rs = ps.executeQuery();// 執行sql語句 獲取結果集 4解析結果集 while(rs.next()){ int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); String sex = rs.getString("sex"); System.out.println(id+"-"+name+"-"+age+"-"+sex); } 5關閉 rs.close(); ps.close(); conn.close(); sql注入:引數中可以有sql語句 區別:Statment可以進行sql注入,PreparedStatement不行 為了避免多次開啟連線,可以把連線資訊寫入到工具類之中 例如:// 工具類 連線工具 用於連線mysql public class JDBCUtil { private static String driver=null; private static String url=null; private static String username=null; private static String password=null; private static Connection conn=null; static{ Properties properties = new Properties(); // 讀取配置檔案 通過反射的方式 InputStream in = JDBCUtil.class.getClassLoader().getResourceAsStream("mysql.properties"); // 把讀取到檔案的流放到properties中進行載入 try { properties.load(in); } catch (IOException e) { e.printStackTrace(); } driver=properties.getProperty("driver"); url=properties.getProperty("url"); username=properties.getProperty("username"); password=properties.getProperty("password"); try { Class.forName(driver); } catch (ClassNotFoundException e) { e.printStackTrace(); } try { conn = DriverManager.getConnection(url, username, password); } catch (SQLException e) { e.printStackTrace(); } } public static Connection getConnection()throws Exception{ return conn; } public static void close(PreparedStatement ps, ResultSet rs,Connection conn){ if(rs!=null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if(ps!=null){ try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } public static void close(PreparedStatement ps,Connection conn){ if(ps!=null){ try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } 配置檔案:避免程式上線之後,內容發生更改時,需要再次打包上傳 在Maven專案中自己提供了一個資源目錄resources,專門用於存放配置檔案 配置檔案的格式:檔名稱.properties 內容格式:KV格式 例如:username=root 讀取配置檔案步驟: 1.建立Java提供的Properties物件,用於操作配置檔案 Properties properties = new Properties(); 2.通過反射讀取配置檔案 InputStream in = 當前類名.class.getClassLoader().getResourceAsStream("配置檔名稱"); 3.Properties物件載入in properties.load(in); 4.獲取配置檔案中的zhi properties.getProperties(String key); 注意:是否正確讀取配置檔案,通過Ctrl+滑鼠左鍵點選 是否能進入到配置檔案中,可以就是正確讀取
java
java入門基礎學習(一)
java入門基礎學習(二)
java入門基礎學習(三)
java入門基礎學習(四)
java入門基礎學習(五)
java入門基礎學習(六)
java入門基礎學習(七)
java入門基礎學習(八)
java入門基礎學習(九)
java入門基礎學習(十)
java入門基礎學習(十一)
java入門基礎學習(十二)
java入門基礎學習(十三)
java入門基礎學習(十四)Maven Git
java總結,題目+筆記
java進階之常見物件(一)
java進階之常見物件(二)
java進階之氣泡排序
java進階之選擇排序
java進階之物件導向(封裝)
java進階之物件導向(程式碼塊、繼承)
java進階之物件導向(多型、抽象、介面)
java進階之匿名內部類、訪問修飾符、包
java進階之io流(位元組流,字元流)
Linux
Linux基礎一
Linux基礎二
Mysql
mysql一
mysql二
mysql三
mysql四
相關文章
- Java 資料庫連線的那些事Java資料庫
- Java Druid資料庫連線池+SpringJDBCJavaUI資料庫SpringJDBC
- 用Navicat連線資料庫-資料庫連線(MySQL演示)資料庫MySql
- 連線資料庫資料庫
- java 資料庫程式設計(一)JDBC連線Sql Server資料庫Java資料庫程式設計JDBCSQLServer
- Java讀取properties檔案連線資料庫Java資料庫
- 資料庫連線池-Druid資料庫連線池原始碼解析資料庫UI原始碼
- mysqli連線資料庫MySql資料庫
- Mongodb資料庫連線MongoDB資料庫
- Android 連線資料庫Android資料庫
- 連線資料庫-mysql資料庫MySql
- jmeter連線資料庫JMeter資料庫
- Mybatis連線資料庫MyBatis資料庫
- JSP連線資料庫JS資料庫
- JDBC連線資料庫JDBC資料庫
- Flask連線資料庫Flask資料庫
- 《四 資料庫連線池原始碼》手寫資料庫連線池資料庫原始碼
- python 連線 mongo 資料庫連線超時PythonGo資料庫
- 資料庫的連線數資料庫
- Python連線SQLite資料庫PythonSQLite資料庫
- C#連線資料庫C#資料庫
- 如何連線MySQL資料庫MySql資料庫
- 使用Sequelize連線資料庫資料庫
- 資料庫連線池原理資料庫
- 使用JPA連線資料庫資料庫
- Datagrip連線Kingbase資料庫資料庫
- Flask資料庫連線池Flask資料庫
- IDEA中資料庫連線Idea資料庫
- jmeter 連線 sqlserver 資料庫JMeterSQLServer資料庫
- python資料庫連線池Python資料庫
- nodejs之資料庫連線NodeJS資料庫
- 使用Python連線資料庫Python資料庫
- django | 連線mysql資料庫DjangoMySql資料庫
- Python連線MySQL資料庫PythonMySql資料庫
- Rust 連線 PostgreSQL 資料庫RustSQL資料庫
- Python 連線 Oracle資料庫PythonOracle資料庫
- PHP 連線access資料庫PHP資料庫
- Mybatis配置資料庫連線MyBatis資料庫