JAVA之JDBC的简单使用(Mysql)

JDBC增删查改

  昨天七七八八的关于Mysql的配置 和 基本使用也算是初步解决了,今天 抽空看了JAVA的JDBC(JAVA DATA BASE CONNECTION)我也不知道我全称拼写对对不对🤣,笔者英文水平太渣渣。

 

  具体的关于解释jdbc的东东在本文就不阐述了,网上百度一大堆,本文主要记录 实现过程 中的关键点和小坑。

 

首先 就要把这个问题的解决方法给抛出来

PreparedStatement  的占位符使用 :

 

PreparedStatement是Statement的改良版,具有预编译功能,方便使用,运行速度快。

可以通过?占位符把字段值替换,之后通过setXXX方法,注入字段值。

但是?占位符只能替换字段值,不能替换表名、字段名或者其他关键词。

 

 
!!!!!!!!!这是个坑啊😭 ,笔者以为占位符是 没有限制的 使用 ,比如在查询语句中使用 "select * from student where ?=?"
      这里笔者想着 pstatement.setString(1,"id");pstatement.setString(2,3);就可以实现id=3的查询过滤,然后就没有然后了,困扰了老纸半个多小时。。。。。。
 
下面,记录实现过程,还是直接贴代码记录:
 

Jdbc_manage 负责  驱动的加载 数据库的连接

 

 1 import java.sql.*;
 2 
 3 import com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException;
 4 
 5 public class Jdbc_manage {
 6 
 7     private static Connection connection = null;
 8     
 9     public static final String Driver = "com.mysql.jdbc.Driver";
10     public static final String URL = "jdbc:mysql://47.93.250.19:3306/121sushe";
11     public static final String USER = "root";
12     public static final String PASSWORD = "********";
13     
14     // 方便其他类获取一个 connection 实例的引用
15     public static Connection get_connection(){
16         
17         try {
18             //使用反射机制 加载驱动
19             Class.forName(Driver);
20             
21             try {
22                 // 这里不知道为什么需要一个强制的类型转换
23                 connection = (Connection)DriverManager.getConnection(URL,USER,PASSWORD);
24                 System.out.println("Mysql连接成功!");
25                 
26                 //  这里的测试 证明 连接正常 获取数据正常
27 //                try {
28 //                    Statement statement = connection.createStatement();
29 //                    ResultSet resultSet = statement.executeQuery("select * from chengyuan");
30 //                    resultSet.next();
31 //                    System.out.println("->" + resultSet.getString("name"));
32 //                } catch (Exception e) {
33 //                    // TODO: handle exception
34 //                    System.out.println("初始查询失败");
35 //                }
36                 
37             } catch (MySQLSyntaxErrorException e) {
38                 // TODO: handle exception
39                 System.out.println("Mysql连接失败");
40                 e.printStackTrace();
41             }
42             
43         } catch (Exception e) {
44             // TODO: handle exception
45             System.out.println("驱动加载失败");
46         }
47         return connection;
48         
49     }
50     
51     public static void close_connection(){
52         
53         try {
54             
55             if(connection != null && !connection.isClosed()){
56                 connection.close();
57             }
58             
59         } catch (Exception e) {
60             // TODO: handle exception
61             System.out.println("关闭connection异常");
62         }
63         
64     }
65     
66     
67 }

 

然后是 Use_mysql类的 ,这个类负责 增删查改 和 显示表中数据

  1 import java.sql.Connection;
  2 import java.sql.PreparedStatement;
  3 import java.sql.ResultSet;
  4 
  5 public class Use_mysql {
  6     
  7     //接收三个参数 分别对应表中的id name age
  8     public boolean insert(int id,String name,int age){
  9         boolean flag=false;
 10         Connection connection = null;
 11         PreparedStatement pStatement = null;
 12         
 13         try {
 14             
 15             String sql = "insert into chengyuan value(?,?,?)";
 16             connection = Jdbc_manage.get_connection();
 17             pStatement = connection.prepareStatement(sql);
 18             pStatement.setInt(1, id);
 19             pStatement.setString(2, name);
 20             pStatement.setInt(3,age);
 21             int i = 0;  
 22             i = pStatement.executeUpdate();   // 执行该条更新
 23             if(i!=0){
 24                 flag = true;
 25             }
 26             
 27             try {
 28                 pStatement.close();
 29                 connection.close();
 30                 
 31             } catch (Exception e) {
 32                 // TODO: handle exception
 33                 System.out.println("关闭失败");
 34             }
 35             
 36         } catch (Exception e) {
 37             // TODO: handle exception
 38             System.out.println("添加行 异常");
 39             e.printStackTrace();
 40         }
 41         return flag;
 42     }
 43     
 44     //接收1个 id 参数
 45     public boolean delete(int id){
 46         boolean flag=false;
 47         Connection connection = null;
 48         PreparedStatement pStatement = null;
 49         
 50         try {
 51             String sql = "delete from chengyuan where id=?";
 52             connection = Jdbc_manage.get_connection();
 53             pStatement = connection.prepareStatement(sql);
 54             pStatement.setInt(1, id);    //删除第  id 行
 55             int i = 0;
 56             i = pStatement.executeUpdate();
 57             if(i!=0){
 58                 flag = true;
 59             }
 60             
 61             try {
 62                 pStatement.close();
 63                 connection.close();
 64                 
 65             } catch (Exception e) {
 66                 // TODO: handle exception
 67                 System.out.println("关闭失败");
 68             }
 69             
 70         } catch (Exception e) {
 71             // TODO: handle exception
 72             System.out.println("删除行 异常");
 73             e.printStackTrace();
 74         }
 75         return flag;
 76         
 77     }
 78     
 79     public boolean select(int id){
 80         boolean flag=false;
 81         Connection connection = null;
 82         PreparedStatement pStatement = null;
 83         ResultSet rSet = null;   //查询操作不同于 其他操作 ,会返回一个结果集
 84         
 85         try {
 86             String sql = "select * from chengyuan where id=?";
 87             connection = Jdbc_manage.get_connection();
 88             pStatement = connection.prepareStatement(sql);
 89             pStatement.setInt(1, id);   //查询 id  行
 90             
 91             try {
 92                 
 93                 rSet = pStatement.executeQuery();
 94                 
 95                 if(rSet.next()){
 96                     flag = true;
 97                     rSet.previous();
 98                 }
 99                 
100                 
101                 while(rSet.next()){
102                     System.out.println(rSet.getString("id") + "-----" + rSet.getString("name")
103                     + "-----" + rSet.getString("age"));
104                 }
105                 
106                 try {
107                     
108                     rSet.close();
109                     pStatement.close();
110                     connection.close();
111                     
112                 } catch (Exception e) {
113                     // TODO: handle exception
114                     System.out.println("关闭失败");
115                 }
116                 
117             } catch (Exception e) {
118                 // TODO: handle exception
119                 System.out.println("结果集异常");
120                 e.printStackTrace();
121             }
122             
123         } catch (Exception e) {
124             // TODO: handle exception
125             System.out.println("查询 异常");
126             e.printStackTrace();
127         }
128         return flag;
129         
130     }
131     
132     //接收3个参数 修改第 id 行的  name和age
133     public boolean update(int id,String name,int age){
134         boolean flag=false;
135         Connection connection = null;
136         PreparedStatement pStatement = null;
137         
138         try {
139             String sql = "update chengyuan set name=?,age=? where id=?";
140             connection = Jdbc_manage.get_connection();
141             pStatement = connection.prepareStatement(sql);
142             pStatement.setString(1, name);
143             pStatement.setInt(2, age);
144             pStatement.setInt(3, id);
145             
146             int i = 0;
147             i = pStatement.executeUpdate();
148             if(i!=0){
149                 flag = true;
150             }
151             
152             try {
153                 pStatement.close();
154                 connection.close();
155                 
156             } catch (Exception e) {
157                 // TODO: handle exception
158                 System.out.println("关闭失败");
159             }
160             
161         } catch (Exception e) {
162             // TODO: handle exception
163             System.out.println("修改异常");
164             e.printStackTrace();
165         }
166         return flag;
167         
168     }
169     
170     //显示所有数据
171     public boolean show(){
172         boolean flag=false;
173         Connection connection = null;
174         PreparedStatement pStatement = null;
175         ResultSet rSet = null;   
176         
177         try {
178             String sql = "select * from chengyuan";
179             connection = Jdbc_manage.get_connection();
180             pStatement = connection.prepareStatement(sql);
181             
182             try {
183                 
184                 rSet = pStatement.executeQuery();
185                 
186                 if(rSet.next()){
187                     flag = true;
188                     rSet.previous();
189                 }
190                 
191                 while(rSet.next()){
192                     System.out.println(rSet.getString("id") + "-----" + rSet.getString("name")
193                     + "-----" + rSet.getString("age"));
194                 }
195                 
196             } catch (Exception e) {
197                 // TODO: handle exception
198                 System.out.println("结果集异常");
199                 e.printStackTrace();
200             }
201             
202         } catch (Exception e) {
203             // TODO: handle exception
204             System.out.println("查询 异常");
205             e.printStackTrace();
206         }
207         return flag;
208     }
209     
210 
211 }

然后是 Main:

 1 import java.util.Scanner;
 2 
 3 public class Main {
 4     
 5     public static void main(String[] args) {
 6         // TODO Auto-generated method stub
 7         
 8         Use_mysql test = new Use_mysql();
 9         Scanner keyboard = new Scanner(System.in);
10         while(true){
11             Main.caidan();
12             System.out.println("请输入");
13             int input = 0;
14             input = keyboard.nextInt();
15             if(input!=0){
16                 Main.xuanze(test, input);
17                 Jdbc_manage.close_connection();
18             }else{
19                 System.exit(0);
20             }
21         }
22         
23 
24     }
25     
26     public static void xuanze(Use_mysql test,int n){
27         Scanner pppp = new Scanner(System.in);
28         switch(n){
29         case 1:
30             int id1,age1;
31             String name1;
32             System.out.println("请以此输入你要添加的行的 id");
33             id1 = pppp.nextInt();
34             pppp.nextLine();
35             System.out.println("请以此输入你要添加的行的 name");
36             name1 = pppp.next();
37             pppp.nextLine();
38             System.out.println("请以此输入你要添加的行的 age");
39             age1 = pppp.nextInt();
40             pppp.nextLine();
41             if(test.insert(id1, name1, age1)){
42                 System.out.println("添加成功");
43             }
44             break;
45         case 2:
46             int id2;
47             System.out.println("请输入你要删除的行对应的id");
48             id2 = pppp.nextInt();
49             if(test.delete(id2)){
50                 System.out.println("删除成功");
51             }
52             break;
53         case 3:
54             int id3;
55             System.out.println("请输入你要查询的行对应的id");
56             id3 = pppp.nextInt();
57             if(test.select(id3)){
58                 System.out.println("查询成功");
59             }
60             break;
61         case 4:
62             int id4,age4;
63             String name4;
64             System.out.println("请输入你要修改的行对应的id");
65             id4 = pppp.nextInt();
66             pppp.nextLine();
67             System.out.println("输入修改此行的name age");
68             name4 = pppp.next();
69             pppp.nextLine();
70             age4 = pppp.nextInt();
71             if(test.update(id4, name4, age4)){
72                 System.out.println("修改成功");
73             }
74             break;
75         case 5:
76             System.out.println("当前表中数据为:");
77             if(test.show()){
78                 System.out.println("显示完毕");
79             }
80             break;
81             default :System.out.println("输入指令有误");break;
82             
83         }
84     }
85     
86     public static void caidan(){
87         System.out.println("******输入0结束*******");
88         System.out.println("*****1.插入一条数据*****");
89         System.out.println("*****2.删除一条数据*****");
90         System.out.println("*****3.查询一条数据*****");
91         System.out.println("*****4.修改一条数据*****");
92         System.out.println("*****5.显示所有数据*****");
93     }
94 
95 }

 

 

OK  成功。

当然,可能还有很多 没有发现的问题,如果你发现了 希望你可以在评论区留言,共同进步👍

  

posted @ 2017-05-30 22:31  昕无旁骛  阅读(337)  评论(0编辑  收藏  举报