07jdbc 使用PreparedStatement介面修改之前的程式碼
阿新 • • 發佈:2018-12-15
之前的增刪改差操作的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下節介紹