1. 程式人生 > >07jdbc 使用PreparedStatement介面修改之前的程式碼

07jdbc 使用PreparedStatement介面修改之前的程式碼

之前的增刪改差操作的sql語句使用的是Statement介面,現在知道了這個介面是有問題的

下面將之前博文中的增刪改差操作用PreparedStatement介面替換掉Statement介面

先提供工具類DBUtil類

package util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ResourceBundle;

public class DBUtil {
	
	private static String driverClass;
	private static String url;
	private static String username;
	private static String password;
	
	static {
		ResourceBundle rb=ResourceBundle.getBundle("util/db");
		driverClass=rb.getString("driverClass");
		url=rb.getString("url");
		
		username=rb.getString("username");
		password= rb.getString("password");
		
		try {
            //註冊驅動
			Class.forName(driverClass);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	public static Connection getConnection() throws SQLException {
        //獲取連線
		return DriverManager.getConnection(url,username,password);
	}
	
}
/*
工具類讀取的util包下的db.properties檔案,4行
driverClass=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/study1?useSSL=false&serverTimezone=UTC
username=root
password=root
*/

查詢操作:

package jdbc;

import java.sql.Connection;

import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import util.DBUtil;
 
public class JdbcTest01new {
	public static void main(String[]args) {
       
		
		try (
				//獲取連線Connection
				Connection conn=DBUtil.getConnection();
		        ///得到執行sequel語句的物件Statement
			    PreparedStatement stmt=conn.prepareStatement("select * from employee");
		        //執行sql語句,並返回結果
			    ResultSet rs=stmt.executeQuery();
		        //處理結果
								){
			  while(rs.next()) {
			    	System.out.println(rs.getObject("employeenumber"));
			    	System.out.println(rs.getObject("employeename"));
			    	System.out.println(rs.getObject("departmentnumber"));
			    	System.out.println(rs.getObject("salary"));
			    	System.out.println(rs.getObject("hiredate"));
			    	System.out.println("-================");
			    }
		} catch (SQLException e1) {
			e1.printStackTrace();
		}
            
	}
}

增刪改查操作

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.junit.Test;

import bean.User;
import util.DBUtil;

public class JdbcTest02new {

	@Test
	public void testJDBC()  {
		
	String sql1="insert into t_user(name,password,email,birthday) values (?,?,?,?) ";
	String sql2="update  t_user set password=? where name=?";
	String sql3="delete from t_user where name=?";
	String sql4="select * from t_user";
	try (
			Connection	conn=DBUtil.getConnection();
			PreparedStatement stat=conn.prepareStatement(sql1);
			PreparedStatement stat2=conn.prepareStatement(sql2);
			PreparedStatement stat3=conn.prepareStatement(sql3);
			PreparedStatement stat4=conn.prepareStatement(sql4);
			){
		//更新操作
		stat.setString(1, "cat");
		stat.setString(2, "123456");
		stat.setString(3, "
[email protected]
"); stat.setDate(4, new java.sql.Date(new Date().getTime()) ); // stat.setString(4, "1992-01-20");傳字串即可 int in1=stat.executeUpdate(); System.out.println(in1==0?"插入失敗":"插入成功"); //修改操作 stat2.setString(1, "123"); stat2.setString(2, "cat"); int in2=stat2.executeUpdate(); System.out.println(in2==0?"修改失敗":"修改成功"); try( ResultSet rs=stat4.executeQuery(); ) { while(rs.next()) { System.out.print(" "+rs.getObject("id")); System.out.print(" "+rs.getObject("name")); System.out.print(" "+rs.getObject("password")); System.out.print(" "+rs.getObject("email")); System.out.print(" "+rs.getObject("birthday")); System.out.println("======================== "); } } //刪除操作 stat3.setString(1, "cat"); int in3=stat3.executeUpdate(); System.out.println(in3==0?"刪除失敗":"刪除成功"); } catch (SQLException e) { e.printStackTrace(); } } }

注意:查詢操作返回ResultSet物件,為了不顯示關閉,用jdk7寫法時,需要再來一個try,寫到try後的小括號中

查詢操作:

package jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.junit.Test;

import bean.User;
import util.DBUtil;

public class JdbcTest02new {


	@Test
	public void testJDBC01()  {
		
		String sql="select id,name,password,email,birthday from t_user";
		 
		try(
				Connection conn = DBUtil.getConnection();
				PreparedStatement stat=conn.prepareStatement(sql);
				ResultSet rs=stat.executeQuery();
				) {
				List<User> list=new ArrayList<>();
				while(rs.next()) {
					User u=new User();
					u.setId(rs.getInt("id"));
					u.setName(rs.getString("name"));
					u.setPassword(rs.getString("password"));
					u.setEmail(rs.getString("email"));
					u.setBirthday(rs.getDate("birthday"));
					list.add(u);
				}
				System.out.println(list);

		} catch (SQLException e) {
			e.printStackTrace();
		}
			
	}
}

單元測試Test下節介紹