天天看點

資料庫操作的學習(一)前提準備使用JDBC操作資料庫的基本步驟

資料庫操作的學習(以SQLServer為例)

  • 前提準備
  • 使用JDBC操作資料庫的基本步驟
    • 加載JDBC驅動包和連接配接資料庫
    • 資料庫查詢
    • 增删改
    • 批處理
    • 動态查詢
    • 調用存儲過程
    • 關閉驅動類

前提準備

在SQLServer中建立一個資料庫(圖書資訊表),并建立一個表(圖書資訊表)
java.sql

use 圖書資訊表;

create table 圖書資訊表

(

編号 int,

書名 char(20),

作者 char(20),

單價 int,

);

insert into 圖書資訊表 values(‘1’,‘平凡的世界’,‘路遙’,40);

insert into 圖書資訊表 values(‘2’,‘紅樓夢’,‘曹雪芹’,50);

insert into 圖書資訊表 values(‘3’,‘三國演義’,‘吳承恩’,37);

insert into 圖書資訊表 values(‘4’,‘水浒傳’,‘施耐庵’,34);

結果

資料庫操作的學習(一)前提準備使用JDBC操作資料庫的基本步驟
加驅動包,提供eclipse和資料庫的橋梁
可參考 用JDBC連接配接SQL Server2017資料庫
注:
連接配接其他資料庫
資料庫操作的學習(一)前提準備使用JDBC操作資料庫的基本步驟

使用JDBC操作資料庫的基本步驟

資料庫操作的學習(一)前提準備使用JDBC操作資料庫的基本步驟

加載JDBC驅動包和連接配接資料庫

Connection con=null;//連接配接流

        //資料庫驅動
		Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			System.out.println("資料庫驅動成功!");
			
			//建立連接配接
			String url="jdbc:sqlserver://127.0.0.1:1433;databaseName=圖書資訊表";//資料庫配置資訊
			String username="sa";//資料庫登入賬号
			String password="1234567";//資料庫登入密碼
			con=DriverManager.getConnection(url,username,password);
			System.out.println("已建立連接配接!");
           

資料庫查詢

代碼

//建立Statement對象
			Statement stmt=con.createStatement();
			
			//給資料庫發送SQL語句,傳回值為ResultSet對象。查詢資料executeQuery
			rs=stmt.executeQuery("select * from 圖書資訊表");
			
			//周遊結果集
			while(rs.next()) {//擷取下一行
				int id=rs.getInt("編号");
				String name=rs.getString("書名");
				String author=rs.getString("作者");
				int price=rs.getInt(4);//擷取第4列的值
				System.out.println(id+" "+name+" "+author+" "+price+" ");
			}
           

結果

資料庫驅動成功!

已建立連接配接!

1 平凡的世界 路遙 40

2 紅樓夢 曹雪芹 50

3 三國演義 吳承恩 37

4 水浒傳 施耐庵 34

增删改

代碼

//建立Statement對象
			Statement stmt=con.createStatement();
           //插入資料
			String sql1="insert into 圖書資訊表(編号,書名,作者,單價) values(5,'悲慘世界','NN',45)";
			int result1=stmt.executeUpdate(sql1);
			System.out.println("有"+result1+"行資料受影響");
			
			//修改資料
			String sql2="update 圖書資訊表 set 編号=4 where 作者='NN'";
			int result2=stmt.executeUpdate(sql2);
			System.out.println("有"+result2+"行資料受影響");
			
			//删除資料
			String sql3="delete from 圖書資訊表  where 編号=4";
			int result3=stmt.executeUpdate(sql3);
			System.out.println("有"+result3+"行資料受影響");
			
           

批處理

stmt.addBatch("insert into 圖書資訊表(編号,書名,作者,單價) values(5,'悲慘世界','NN',45)");
			stmt.addBatch("insert into 圖書資訊表(編号,書名,作者,單價) values(6,'悲慘世界','MM',45)");
			stmt.addBatch("insert into 圖書資訊表(編号,書名,作者,單價) values(7,'悲慘世界','JJ',45)");
			
			int results[]=stmt.executeBatch();//批處理資料
           

動态查詢

解決SQL安全問題

  • PreparedStatement接口—繼承——>Statement接口

代碼:

//動态SQL
			String sql="select * from 圖書資訊表 where 編号=? and 書名 like ?";
			PreparedStatement ps=con.prepareStatement(sql);
			ps.setInt(1, 4);
			ps.setString(2, "水%");
			ResultSet rs=ps.executeQuery();
			System.out.println("編号\t書名\t作者\t單價");
			while(rs.next()) {
				System.out.println(rs.getInt(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3)+"\t"+rs.getInt(4)+"\t");
			}
           

結果:

編号 書名 作者 單價

4 水浒傳 施耐庵 34

調用存儲過程

  • CallableStatement接口——extends——>PreparedStatement接口
前提準備:
在SQLServer中建立存儲過程

–建立存儲過程

create procedure my_procedure

as

begin

select * from 圖書資訊表

end

go

exec my_procedure

go

代碼:

//調用存儲方法
			CallableStatement cs=con.prepareCall("{call my_procedure}");
			ResultSet rs=cs.executeQuery();
			System.out.println("編号\t書名\t作者\t單價");
			while(rs.next()) {
				System.out.println(rs.getInt(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3)+"\t"+rs.getInt(4)+"\t");
			}
           

結果:

編号 書名 作者 單價

1 平凡的世界 路遙 40

2 紅樓夢 曹雪芹 50

3 三國演義 吳承恩 37

4 水浒傳 施耐庵 34

5 悲慘世界 NN 45

6 悲慘世界 MM 45

7 悲慘世界 JJ 45

1 平凡的世界 路遙 40

2 紅樓夢 曹雪芹 50

3 三國演義 吳承恩 37

4 水浒傳 施耐庵 34

1 平凡的世界 路遙 40

2 紅樓夢 曹雪芹 50

3 三國演義 吳承恩 37

4 水浒傳 施耐庵 34

1 平凡的世界 路遙 40

2 紅樓夢 曹雪芹 50

3 三國演義 吳承恩 37

4 水浒傳 施耐庵 34

關閉驅動類

while(rs.next())
{rs.getXxx(...)
	...
}catch(....){
	...
}catch(...){
	.....
}catch(...){
	.....
}finally{
//打開順序與關閉順序相反
if(rs!=null){
	rs.close();
}
if(stmt!=null){
	stmt.close();
}
if(con!=null){
	con.close();
}
}
           

繼續閱讀