java如何連接數據庫並對其操作(以PostgreSQL為例)
-
相關概念
JDBC(Java Data Base Connectivity)是一種用於執行SQL語句的Java API,可以為多種關系數據庫提供統一訪問,它是一組用java語言編寫的類和接口組成。JDBC提供了一種基准,據此可以構建更高級的工具和接口,使數據庫開發人員能夠編寫數據庫應用程序
數據庫驅動:我們安裝好數據之后,我們的應用程序不能直接使用數據庫,必須通過相應的數據庫驅動程序,通過驅動程序去和數據庫打交道。其實也就是數據廠商的JDBC接口實現,即對connection等接口的實現類的jar文件 -
常用接口
- Driver接口
Driver接口由數據庫廠家提供,作為java開發人員,只需要使用Driver接口就可以了。在編程中要連接數據庫,必須先裝載特定的數據庫驅動程序,以PostgreSQL驅動裝載為例:
Class.forName("org.postgresql.Driver");
- Connection接口
Connection與特定數據庫的連接(會話),在連接上下文中執行sql語句並返回結果,DriverManager.getConnection(url,user,password)方法建立在JDBC URL中定義的數據庫Connection連接上,以連接PostgreSQL為例:
Connection connection=DriverManager.getConnection("jdbc:postgresql://172.16.55.190:5432/thingsboard",user,password);(設置自己的ip地址,端口號,thingsboard為數據庫名稱)
- Statement接口
用於執行靜態sql語句並返回它所生結果的對象
三種Statement類:
- Statement:由CreateStatement創建,用於發送簡單的SQL語句
- PreparedStatement:可以防止sql注入
- CallableStatement:
常用Statement方法:
- execute(String sql):運行語句,返回是否有結果集
- executeQuery(String sql):運行select語句,返回ResultSet結果集
- executeUpdate(String sql):運行insert/update/delete操作,返回更新的行數
- ResultSet接口
ResultSet提供檢索不同類型字段的方法,常用有:getString(int index/String columnName),getFloat(int index/String columnName),getBoolean(int index/String columnName),getObject(int index/String columnName)--獲取數據庫中任意類型的數據
ResultSet還提供了對結果進行滾動的方法:
- next();移動到下一行
- Previous();移動到前一行
- absolute(int row);移動到指定行
- beforeFirst();移動到最前面
- afterLast();移動到最后面
- Driver接口
####實現步驟:
+ 下載驅動(jar包)
驅動的下載地址:[jar包](https://jdbc.postgresql.org/download.html)
+ eclipse導入jar包
右鍵點擊創建的項目新建文件夾,文件夾命名為“lib",將下載的jar包復制到lib文件夾中,右鍵點擊導入的jar包,找到構建路徑,點擊添加構建路徑
+ 實現代碼:
```
package Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class SelectTest {
public static void main(String[] args) {
Connection connection = null;
Statement statement = null;
try {
String url = "jdbc:postgresql://172.16.55.190:5432/thingsboard";//換成自己PostgreSQL數據庫實例所在的ip地址,並設置自己的端口
String user = "postgres";
String password = "123456"; //在這里我的密碼為空,讀者可以自己選擇是否設置密碼
Class.forName("org.postgresql.Driver");
connection= DriverManager.getConnection(url, user, password);
//System.out.println("是否成功連接pg數據庫"+connection);
String sql ="select * from public.syuser";
statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
while(resultSet.next()){
//取出列值
String id = resultSet.getString(2);
String name = resultSet.getString(8);
System.out.println(id+"\t\t"+name);
}
resultSet.close();
statement.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
###語句解析:
> String url = "jdbc:postgresql://172.16.55.190:5432/thingsboard";
jdbc:協議 postgresql:子協議 172.16.55.190:主機 5432:端口 thingsboard:數據庫
創建執行語句的statement
String sql="insert into user(name,pwd) values(?,?)";
PrearedStatement ps = conn.preparedStatement(sql);
ps.setString(1,"col_value");//占位符從第一位開始
ps.setString(2,"123435")
ps.executeQuery();
處理執行結果的ResultSet
ResultSet rs=ps.executeQuery();
While(rs.next()){
rs.getString("col_name");
rs.getInt(1);
}
釋放資源
resultSet.close();
statement.close();
connection.close();
[常用Sql語句查詢](https://www.yiibai.com/html/postgresql/2013/080442.html)
本博客部分內容參考自https://www.cnblogs.com/erbing/p/5805727.html