JDBC連接數據庫
一、JDBC
概念:JDBC(Java DataBase Connectivity) 是一種Java數據庫連接計數,能實現Java程序對各種數據庫的訪問。有一組使用Java語言編寫的類和接口組成,稱爲JDBC API
作用:
1)建立與數據庫之間的訪問連接
2)將編寫好的SQL語句發送到數據庫執行
3)對數據庫返回的結果進行處理
二、使用JDBC訪問數據庫
1、幾個重要的JDBC API
1)DriverManager類:負責依據數據庫的不同,管理JDBC驅動
2)Connection(連接)接口:負責連接數據庫並擔任傳送數據的任務
3)Statement接口:有Connection產生,負責執行SQL語句
4)ResultSet 接口:負責保存Statement 執行後所產生的執行結果
2、訪問數據庫的步驟:
1.加載驅動Class.forName();
2.創建連接 Connection conn = DriverManager.getConnection(url,user,pwd);
3.創建Statement執行SQL語句 Statement stmt = conn.createStatement();
4.返回ResultSet查詢結果 ResultSet rs = stmt.execute(sql);
5.釋放資源 .close();
//加載數據庫驅動
Class.forName("com.mysql.jdbc.Driver");
//使用DriverManager類獲取數據庫連接
//配置url地址,jdbc:mysql://主機:端口/數據庫
String url = "jdbc:mysql://localhost:3306/kgcnews";
Connection connection = DriverManager.getConnection(url,"root","root");
//執行SQL語句
Statement stmt = connection.createStatement();
String sql = "select * from news_detail";
ResultSet rs = stmt.executeQuery(sql); //結果集保存到ResultSet
while(rs.next){ //獲取查詢的各個字段
String id = rs.getInt(1); //數字表示按順序第幾個字段
String title = rs.getString("title");//具體某列的值
System.out.println("id:"+id+",\t title:"+title)
}
//使用結束關閉資源,注意要判空
rs.close();
stmt.close();
connection.close();
讀取配置文件的方式
改配置文件要比改Java代碼方便
創建jdbc.peoperties
配置文件,將數據庫的信息寫入配置文件
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/kgcnews
jdbc.user = root
jdbc.password = root
加載配置文件
public static void loadProperties() {
//讀取文件內容
InputStream is = JDBCUtil.class.getResourceAsStream("jdbc.properties");
//創建peoperties對象
Properties prop = new Properties();
try {
prop.load(is); //從字節輸入流中讀取鍵值對
//根據鍵獲取對應的值
String driver = prop.getProperty("jdbc.driver");
String url = prop.getProperty("jdbc.url");
String user = prop.getProperty("jdbc.user");
String password = prop.getProperty("jdbc.password");
//後面爲具體的用JDBC連接數據庫步驟
} catch (IOException e) {
e.printStackTrace();
}
}
3、操作數據庫
對數據庫進行增刪改查操作
Statement 與prepareStatement
Staement 由方法 createStatement()
創建,該對象用於發送簡單的SQL語句
prepareStatement 由方法 prepareStatement()
創建,該對象用於發送帶有一個或者多個輸入參數的SQL語句
SQL語句使用 '?'作爲佔位符
用setXxx()方法設置數據
例:
Connection conn=null;
Statement stmt = null;
ResultSet rs = null;
Statement進行插入操作
public void insert() {
try {
stmt =conn.createStatement();
String sql = "insert into news_detail values (3,1,'測試','測試結果數據放在這裏',null,null,'admin',now(),null );";
//執行插入語句
stmt.execute(sql);
} catch (SQLException e) {
e.printStackTrace();
}
}
Statement進行刪除操作
public void delete(int id ){
try {
stmt =conn.createStatement();
//刪除的sql語句
String sql = "delete from news_detail where id="+id;
//執行刪除語句
stmt.execute(sql);
} catch (SQLException e) {
e.printStackTrace();
}
}
Statement進行更新操作
public void update() {
try {
stmt = conn.createStatement();
String sql = "update news_detail set title ='測試新參數' where id=3";
stmt.execute(sql);
} catch (SQLException e) {
e.printStackTrace();
}
}
Statement進行查詢操作
public void queryAll(String str){
//要執行的動作
try {
//創建statement對象
stmt = conn.createStatement();
String sql = "select * from news_detail"+str;
//執行查詢語句,結果集保存到ResultSet中
rs = stmt.executeQuery(sql);
while (rs.next()) {
int id = rs.getInt(1);
String title = rs.getString("title");
System.out.println("id:"+id+",title:"+title);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
prepareStatement進行操作
和Statement可以多有 ’ ?'和setXxx()賦值的區別,後續操作與Statement操作類似,後面只貼了一個insert的操作
PrepareStatement psmt =null;
public void insertUser(int id,String name,String pwd,String email,int userType) {
try {
String sql = "insert into news_user values(?,?,?,?,?)";
PrepareStatement pstm = conn.prepareStatement(sql);
//用set方式給插入的值賦值,1-4對應上面的sql語句
pstm.setInt(1, id);
pstm.setString(2, name);
pstm.setString(3, pwd);
pstm.setString(4, email);
pstm.setInt(5, userType);
//執行SQL語句
pstm.execute();
} catch (SQLException e) {
e.printStackTrace();
}
}
4、execute、executeQuery、executeUpdate區別
-
execute:
執行SQL語句,返回的是boolean值,表示查詢的結果集(ResultSet接受)是否返回了
-
executeQuery:
只能執行查詢的SQL語句,返回的是一個ResultSet結果集
-
executeUpdate:
執行的是insert,update,delete的SQL語句,返回的是一個int型整數值,表示受到影響的行數;
5、statment 和preparestatment區別
錯誤以及不足之處請指正,謝謝!