JDBC进阶之PreparedStatement执行SQL语句(MySQL)

时间:2023-01-14 03:49:26
一、什么是PreparedStatement
          参阅Java API文档,我们可以知道,PreparedStatement是Statement的子接口(如图所示),表示预编译的 SQL 语句的对象,SQL 语句被预编译并存储在PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。
JDBC进阶之PreparedStatement执行SQL语句(MySQL)
 
 
二、通过PreparedStatement获取在运行命令行中执行的参数,将参数插入到某张数据表中
          相关的实验过程,包括在预先创建程序所需数据库、创建所需数据表格、在开发环境中加载驱动程序包等,可参考前一篇文章《JDBC连接MySQL数据库及示例》(前往该文章
具体代码如下:
  1. package com.serein.jdbc;
  2. import java.sql.*;
  3. public class preparedStatemetTest {
  4. public static void main(String[] args) {
  5. //检查命令行中是否够7个参数
  6. if(args.length != 7) {
  7. System.out.println("Parameter Error! Please Input Again!");
  8. System.exit(-1);
  9. }
  10. //程序获取运行栈里的7个参数值
  11. String name = args[0];
  12. int age = 0;
  13. try {
  14. age = Integer.parseInt(args[1]);
  15. } catch (NumberFormatException e) {
  16. System.out.println("Parameter Error! Age should be Number Format!");
  17. System.exit(-1);
  18. }
  19. String sex = args[2];
  20. String address = args[3];
  21. String depart = args[4];
  22. int worklen = 0;
  23. try {
  24. worklen = Integer.parseInt(args[5]);
  25. } catch (NumberFormatException e) {
  26. System.out.println("Parameter Error! Worklen should be Number Format!");
  27. System.exit(-1);
  28. }
  29. int wage = 0;
  30. try {
  31. wage = Integer.parseInt(args[6]);
  32. } catch (NumberFormatException e) {
  33. System.out.println("Parameter Error! Wage should be Number Format!");
  34. System.exit(-1);
  35. }
  36. //创建PreparedStatement对象
  37. PreparedStatement pstmt = null;
  38. //创建连接对象
  39. Connection conn = null;
  40. //连接数据库,并插入数据
  41. try {
  42. //加载MySQL驱动实例,提供了两种方法,是等价的
  43. Class.forName("com.mysql.jdbc.Driver");
  44. //new oracle.jdbc.driver.OracleDriver();
  45. //建立连接
  46. conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/myuser", "root", "root");
  47. //使用PreparedStatement对象里来构建并执行SQL语句,7个问号代表7个字段预先要保留的值
  48. pstmt = conn.prepareStatement("INSERT INTO staff(name, age, sex,address, depart, worklen,wage) VALUES (?, ?, ?, ?, ?, ?, ?)");
  49. //通过PreparedStatement对象里的set方法去设置插入的具体数值
  50. pstmt.setString(1, name);
  51. pstmt.setInt(2, age);
  52. pstmt.setString(3, sex);
  53. pstmt.setString(4,address );
  54. pstmt.setString(5, depart);
  55. pstmt.setInt(6, worklen);
  56. pstmt.setInt(7, wage);
  57. pstmt.executeUpdate();
  58. //插入成功提示
  59. System.out.print("成功插入一条数据记录!");
  60. //捕获驱动加载失败异常
  61. } catch (ClassNotFoundException e) {
  62. e.printStackTrace();
  63. //捕获SQL语句执行失败异常
  64. } catch (SQLException e) {
  65. e.printStackTrace();
  66. //恢复变量初始值
  67. } finally {
  68. try {
  69. if(pstmt != null) {
  70. pstmt.close();
  71. pstmt = null;
  72. }
  73. if(conn != null) {
  74. conn.close();
  75. conn = null;
  76. }
  77. //捕获SQL异常
  78. } catch (SQLException e) {
  79. e.printStackTrace();
  80. }
  81. }
  82. }
  83. }
 

编写好代码之后,要进行带参数运行程序,方法如下:
JDBC进阶之PreparedStatement执行SQL语句(MySQL)

 
 
JDBC进阶之PreparedStatement执行SQL语句(MySQL)
 
其中输入的参数为(可参考进行修改):
SereinChan
25
M
Guangzhou
Engine
3
5000

查看Console控制台,"成功插入一条数据记录!":

JDBC进阶之PreparedStatement执行SQL语句(MySQL)

查看MySQL数据库,进行确认:

JDBC进阶之PreparedStatement执行SQL语句(MySQL)

成功完成!

转自:http://blog.csdn.net/cxwen78/article/details/6868941