1. Java数据库的连接及操作

原文地址:

1. Java数据库的连接及操作

1)数据库连接工具类

复制代码
 1 /**
 2  * 数据库连接工具类
 3  * @author vanguard
 4  *
 5  */
 6 public class JDBCUtils {
 7     
 8     private static Connection conn;
 9     private static String driverClass;
10     private static String url;
11     private static String username;
12     private static String password;
13     private static InputStream in;
14     
15     static {
16         try {
17             in = JDBCUtils.class.getClassLoader().getResourceAsStream("database.properties");
18             Properties prop = new Properties();
19             prop.load(in);
20             driverClass = prop.getProperty("driverClass");
21             url = prop.getProperty("url");
22             username = prop.getProperty("username");
23             password = prop.getProperty("password");
24             Class.forName(driverClass);
25             conn = DriverManager.getConnection(url, username, password);
26         } catch (IOException e) {
27             System.out.println("加载配置文件失败");
28             e.printStackTrace();
29         } catch (ClassNotFoundException e) {
30             System.out.println("驱动包加载失败");
31             e.printStackTrace();
32         } catch (SQLException e) {
33             System.out.println("数据库连接失败");
34             e.printStackTrace();
35         }
36     }
37     
38     /**
39      * 获取连接的方法
40      * @return
41      */
42     public static Connection getConnection() {
43         return conn;
44     }
45     
46     /**
47      * 关闭连接 释放资源
48      * @param conn
49      * @param sm
50      * @throws SQLException
51      */
52     public static void close(Connection conn, PreparedStatement ps) throws SQLException {
53         if(conn != null) {
54             conn.close();
55         }
56         if(ps != null) {
57             ps.close();
58         }
59     }
60     
61     /**
62      * 关闭所有连接
63      * @param conn
64      * @param st
65      * @param rs
66      * @throws SQLException
67      */
68     public static void close(Connection conn, PreparedStatement ps, ResultSet rs) throws SQLException {
69         if(conn != null) {
70             conn.close();
71         }
72         if(ps != null) {
73             ps.close();
74         }
75         if(rs != null) {
76             rs.close();
77         }
78     } 
79     
80 }
复制代码

2)JDBC读取数据表sort,每行数据封装到Sort类的对象中很多个Sort类对象,存储到List集合中

复制代码
 1 package com.java.demo02;
 2 /**
 3  * sort实体类
 4  * @author vanguard
 5  *
 6  */
 7 public class Sort {
 8     private int sid;
 9     private String sname;
10     private String sprice;
11     private String sdesc;
12     
13     public Sort() {}
14     public Sort(int sid, String sname, String sprice, String sdesc) {
15         super();
16         this.sid = sid;
17         this.sname = sname;
18         this.sprice = sprice;
19         this.sdesc = sdesc;
20     }
21     public int getSid() {
22         return sid;
23     }
24     public void setSid(int sid) {
25         this.sid = sid;
26     }
27     public String getSname() {
28         return sname;
29     }
30     public void setSname(String sname) {
31         this.sname = sname;
32     }
33     public String getSprice() {
34         return sprice;
35     }
36     public void setSprice(String sprice) {
37         this.sprice = sprice;
38     }
39     public String getSdesc() {
40         return sdesc;
41     }
42     public void setSdesc(String sdesc) {
43         this.sdesc = sdesc;
44     }
45     
46     @Override
47     public String toString() {
48         return "Sort [sid=" + sid + ", sname=" + sname + ", sprice=" + sprice
49                 + ", sdesc=" + sdesc + "]";
50     }    
51 }
复制代码
复制代码
 1 /**
 2  *    JDBC读取数据表sort,每行数据封装到Sort类的对象中
 3  *    很多个Sort类对象,存储到List集合中
 4  * @author vanguard
 5  *
 6  */
 7 public class JDBCDemo {
 8     public static void main(String[] args) throws SQLException {
 9         //调用数据库链接工具类方法获取连接
10         Connection conn = JDBCUtils.getConnection();
11         //定义sql语句
12         String sql = "SELECT * FROM sort";
13         //获取预编译对象
14         PreparedStatement ps = conn.prepareStatement(sql);
15         //执行查询操作获取结果集
16         ResultSet rs = ps.executeQuery();
17         //定义list集合,存放Sort对象
18         List<Sort> list = new ArrayList<Sort>();
19         //遍历结果集
20         while(rs.next()) {
21             int sid = rs.getInt("sid");
22             String sname = rs.getString("sname");
23             String sprice = rs.getString("sprice");
24             String sdesc = rs.getString("sdesc");
25             Sort s = new Sort(sid, sname, sprice, sdesc);
26             list.add(s);
27         }
28         JDBCUtils.close(conn, ps, rs);
29         //遍历list集合
30         for(Sort s : list) {
31             System.out.println(s.getSid() + "   " + s.getSname() + "   " + s.getSprice() + "   " + s.getSdesc());
32         }
33     }
34 }
复制代码

2.map中有如下数据(用户名=密码) [liuyan=123456,wangbaoqiang=123321,fangbian=abcd,miejueshitai=123abc321]
在ip为127.0.0.1数据库名为stdb,连接数据库的用户名和密码为:admin和123456中有一个userinfo表相关字段为(id,username,password)
(1)将map中的手机号码取出来打印到控制台上
* 直接使用map集合的keySet()方法获取所有的key组成的Set集合,并遍历
(2)判断map中所有的用户名在userinfo表中是否存在存在则输出"该用户已注册",如果不存在将该用户名及对应的密码存入到userinfo表中
(map中的数据不需要修改)
* 连接到数据库
* 创建表
drop database stdb;
create database stdb;
use stdb;
create table userinfo(
id int(10) primary key auto_increment,
username varchar(200),
password varchar(200)
);

复制代码
 1 /**
 2  * 1.map中有如下数据(用户名=密码)
 3     [liuyan=123456,wangbaoqiang=123321,fangbian=abcd,miejueshitai=123abc321]
 4     在ip为127.0.0.1数据库名为stdb,连接数据库的用户名和密码为:admin和123456中有一个userinfo表相关字段为(id,username,password)
 5     (1)将map中的数据取出来打印到控制台上
 6         * 直接使用map集合的keySet()方法获取所有的key组成的Set集合,并遍历
 7     (2)判断map中所有的用户名在userinfo表中是否存在存在则输出"该用户已注册",如果不存在将该用户名及对应的密码存入到userinfo表中
 8     (map中的数据不需要修改)
 9         * 连接到数据库
10         * 创建表
11         drop database stdb;
12         create database stdb;
13         use stdb;
14         create table userinfo(
15             id int(10) primary key auto_increment,
16             username varchar(200),
17             password varchar(200)
18         ); 
19  * @author vanguard
20  *
21  */
22 public class Demo01 {
23     private static Connection conn;
24     private static PreparedStatement ps;
25     private static ResultSet rs;
26     public static void main(String[] args) throws SQLException {
27         //定义Map集合
28         HashMap<String, String> userInfo = new HashMap<String, String>();
29         //Map集合中添加数据
30         userInfo.put("liuyan", "123456");
31         userInfo.put("wangbaoqiang", "123321");
32         userInfo.put("fangbian", "abcd");
33         userInfo.put("miejueshitai", "123abc321");
34         //(1)将map中的数据取出来打印到控制台上
35         printUserInfo(userInfo);
36         Set<String> userSet = userInfo.keySet();
37         //获取数据库连接
38         conn = JDBCUtils.getConnection();
39         //(2)判断map中所有的用户名在userinfo表中是否存在存在则输出"该用户已注册",
40         //如果不存在将该用户名及对应的密码存入到userinfo表中
41         for(String username : userSet) {
42             if(findByUsername(username)) {
43                 System.out.println(username + "该用户已存在");
44             } else {
45                 registUser(username, userInfo.get(username));
46                 System.out.println("成功注册用户" + username);
47             }
48         }
49         JDBCUtils.close(conn, ps, rs);
50     }
51     
52     /**
53      * 查询用户名在userinfo表中是否存在
54      * @param username
55      * @return
56      * @throws SQLException
57      */
58     private static boolean findByUsername(String username) throws SQLException {
59         String sql = "SELECT * FROM userinfo where username=?";
60         ps = conn.prepareStatement(sql);
61         ps.setString(1, username);
62         rs = ps.executeQuery();
63         if(rs.next()) {
64             return true;
65         }
66         return false;
67     }
68     
69     /**
70      * 注册用户
71      * @param username
72      * @param password
73      * @return
74      * @throws SQLException
75      */
76     private static void registUser(String username, String password) throws SQLException {
77         String sql = "INSERT INTO userinfo(username,password) values(?,?)";
78         ps = conn.prepareStatement(sql);
79         ps.setString(1, username);
80         ps.setString(2, password);
81         ps.executeUpdate();
82     }
83 
84     /**
85      * 遍历Map集合,将数据打印到控制台
86      * @param userInfo
87      */
88     private static void printUserInfo(HashMap<String, String> userInfo) {
89         Set<String> userSet = userInfo.keySet();
90         for(String username : userSet) {
91             String password = userInfo.get(username);
92             System.out.println(username + "..." + password);
93         }
94     }
95     
96 }
复制代码

3.一个数据库stdb,用户名为admin 密码为123456 已存在一个表student中有五个学生的信息,姓名,性别,年龄,分数.
id(varchar(20)) name(varchar(20)) sex(varchar(20)) score(int(10))
1 李少荣 女 80
2 邵凯 男 75
3 周强 男 95
4 王晓婷 女 55
5 张秀花 女 68
6 顾会 女 50
7 赵天一 男 32
(1)查询女性,成绩80以上的学生数量
(2)将姓张的男同学的的成绩改为100
(3)查询成绩大于60的女性,显示姓名,性别,成绩
(4)分别统计所有男同学的平均分,所有女同学的平均分及总平均分
(5)按照分数从小到大的顺序打印分数大于总平均分的学员信息(id-name-sex-score),并将分数大于总平均分的学员信息(按照分数从小到大的顺序)(id-name-sex-score)写入到studentInfo.txt文件中(写入格式:id-name-sex-score)
(6)定义查询所有学生的方法public List<Student> getAllStudent(){}
(7)定义根据id查询学生的方法public Student getStudentById(String id){}
(8)定义根据id删除学生的方法public int deleteStudentById(String id){}//注意只有数据库中有才能删除,没有无法删除
(9)定义添加学员的方法public int addStudent(){}//注意只有数据库中没有有才能添加,有无法添加
(10)定义根据id修改学员的信息public int updateStudentById(String id){}//注意只有数据库中有才能修改,没有无法修改

复制代码
 1 public class Student {
 2     private int id;
 3     private String name;
 4     private String sex;
 5     private int score;
 6 
 7     public Student() {
 8     }
 9 
10     public Student(int id, String name, String sex, int score) {
11         super();
12         this.id = id;
13         this.name = name;
14         this.sex = sex;
15         this.score = score;
16     }
17 
18     public int getId() {
19         return id;
20     }
21 
22     public void setId(int id) {
23         this.id = id;
24     }
25 
26     public String getName() {
27         return name;
28     }
29 
30     public void setName(String name) {
31         this.name = name;
32     }
33 
34     public String getSex() {
35         return sex;
36     }
37 
38     public void setSex(String sex) {
39         this.sex = sex;
40     }
41 
42     public int getScore() {
43         return score;
44     }
45 
46     public void setScore(int score) {
47         this.score = score;
48     }
49 
50     @Override
51     public String toString() {
52         return "Student [id=" + id + ", name=" + name + ", sex=" + sex
53                 + ", score=" + score + "]";
54     }
55     
56     
57 }
复制代码
复制代码
  1 /**
  2  * 2.一个数据库stdb,用户名为admin 密码为123456 已存在一个表student中有
  3  * 五个学生的信息,姓名,性别,年龄,分数.
  4     id(varchar(20))   name(varchar(20))   sex(varchar(20))  score(int(10))
  5      1                    李少荣                 女                   80
  6      2                    邵凯                   男                   75
  7      3                    周强                   男                   95
  8      4                    王晓婷                 女                   55
  9      5                    张秀花                 女                   68
 10      6                    顾会                   女                   50
 11      7                    赵天一                 男                   32
 12     (1)查询女性,成绩80以上的学生数量
 13     (2)将姓张的男同学的的成绩改为100
 14     (3)查询成绩大于60的女性,显示姓名,性别,成绩
 15     (4)分别统计所有男同学的平均分,所有女同学的平均分及总平均分
 16     (5)按照分数从小到大的顺序打印分数大于总平均分的学员信息(id-name-sex-score),并将分数大于总平均分的学员信息(按照分数从小到大的顺序)
       (id-name-sex-score)写入到studentInfo.txt文件中(写入格式:id-name-sex-score)
 17     (6)定义查询所有学生的方法public List<Student> getAllStudent(){}
 18     (7)定义根据id查询学生的方法public Student getStudentById(String id){}
 19     (8)定义根据id删除学生的方法public int deleteStudentById(String id){}//注意只有数据库中有才能删除,没有无法删除
 20     (9)定义添加学员的方法public int addStudent(){}//注意只有数据库中没有有才能添加,有无法添加
 21     (10)定义根据id修改学员的信息public int updateStudentById(String id){}//注意只有数据库中有才能修改,没有无法修改
 22  * @author vanguard
 23  *
 24  */
 25 public class Demo02 {
 26     private static  Connection conn;
 27     private static PreparedStatement ps;
 28     private static ResultSet rs;
 29     
 30     public static void main(String[] args) throws SQLException, IOException {
 31         conn = JDBCUtils.getConnection();
 32         //(1)查询女性,成绩80以上的学生数量
 33         //getWomenGradeCount();
 34         //(2)将姓张的男同学的的成绩改为100
 35         //updateGrade();
 36         //(3)查询成绩大于60的女性,显示姓名,性别,成绩
 37         //getWomenGrade();
 38         //(4)分别统计所有男同学的平均分,所有女同学的平均分及总平均分
 39         //getAvgScore();
 40         //(5)按照分数从小到大的顺序打印分数大于总平均分的学员信息(id-name-sex-score),
 41         //并将分数大于总平均分的学员信息(按照分数从小到大的顺序)(id-name-sex-score)
 42         //写入到studentInfo.txt文件中(写入格式:id-name-sex-score)
 43         //saveUserInfoTofile();
 44         //定义根据id查询学生
 45 //        Student s = getStudentById("1");
 46 //        System.out.println(s);
 47 //        JDBCUtils.close(conn, ps, rs);
 48         //查询所有的学生信息
 49         List<Student> students = getAllStudent();
 50         for(Student s : students) {
 51             System.out.println(s.getId() + "  " + s.getName() + "  " + s.getSex() + "  " + s.getScore());
 52         }
 53         //根据id修改学生信息
 54         int i = updateStudentById("2");
 55         if(i != 0) {
 56             System.out.println("修改成功!");
 57         } else {
 58             System.out.println("修改失败!");
 59         }
 60     }
 61     /**
 62      * 根据id修改学员的信息
 63      * @param id
 64      * @return
 65      * @throws SQLException
 66      */
 67     public static int updateStudentById(String id) throws SQLException{
 68         String sql = "UPDATE student SET name=?,sex=?,score=? WHERE id=?";
 69         ps = conn.prepareStatement(sql);
 70         Scanner sc = new Scanner(System.in);
 71         System.out.println("请输入要修改学员的姓名:");
 72         String name = sc.next();
 73         System.out.println("请输入要修改学员的性别:");
 74         String sex = sc.next();
 75         System.out.println("请输入要修改学员的成绩:");
 76         int score = sc.nextInt();
 77         ps.setString(1, name);
 78         ps.setString(2, sex);
 79         ps.setInt(3, score);
 80         ps.setString(4, id);
 81         int count = ps.executeUpdate();
 82         return count;
 83     }
 84     
 85     /**
 86      * 添加学员
 87      * @return
 88      * @throws SQLException
 89      */
 90     public static int addStudent() throws SQLException{
 91         String sql = "INSERT INTO student(name,sex,score) VALUES(?,?,?)";
 92         ps = conn.prepareStatement(sql);
 93         Scanner sc = new Scanner(System.in);
 94         System.out.println("请输入要添加学员的姓名:");
 95         String name = sc.next();
 96         System.out.println("请输入要添加学员的性别:");
 97         String sex = sc.next();
 98         int score = sc.nextInt();
 99         System.out.println("请输入要添加学员的成绩:");
100         ps.setString(1, name);
101         ps.setString(2, sex);
102         ps.setInt(3, score);
103         int count = ps.executeUpdate();
104         return count;
105     }
106     /**
107      * 
108      * @param id
109      * @return
110      * @throws SQLException 
111      */
112     public static int deleteStudentById(String id) throws SQLException{
113         String sql = "DELETE FROM student WHERE id=?";
114         ps = conn.prepareStatement(sql);
115         int count = ps.executeUpdate();
116         return count;
117     }
118     /**
119      * 根据id查询学生
120      * @param id
121      * @return
122      * @throws SQLException
123      */
124     public static Student getStudentById(String id) throws SQLException{
125         String sql = "SELECT * FROM student WHERE id=?";
126         ps = conn.prepareStatement(sql);
127         ps.setString(1, id);
128         rs = ps.executeQuery();
129         Student s = null;
130         if(rs.next()) {
131             int sid = Integer.parseInt(id);
132             String name = rs.getString("name");
133             String sex = rs.getString("sex");
134             int score = rs.getShort("score");
135             s = new Student(sid, name, sex, score);
136         }
137         return s;
138     }
139     /**
140      * 查询所有的学生信息
141      * @return
142      * @throws SQLException
143      */
144     public static List<Student> getAllStudent() throws SQLException{
145         List<Student> students = new ArrayList<Student>();
146         String sql = "SELECT * FROM student";
147         ps = conn.prepareStatement(sql);
148         rs = ps.executeQuery();
149         while(rs.next()) {
150             int id = rs.getInt("id");
151             String name = rs.getString("name");
152             String sex = rs.getString("sex");
153             int score = rs.getInt("score");
154             Student s = new Student(id, name, sex, score);
155             students.add(s);
156             
157         }
158         return students;
159     }
160     /**
161      *  按照分数从小到大的顺序打印分数大于总平均分的学员信息(id-name-sex-score),
162      *    并将分数大于总平均分的学员信息(按照分数从小到大的顺序)(id-name-sex-score)
163      *    写入到studentInfo.txt文件中(写入格式:id-name-sex-score)
164      * @throws SQLException
165      * @throws IOException
166      */
167     public static void saveUserInfoTofile() throws SQLException, IOException {
168         String sql = "SELECT * FROM student WHERE score>(SELECT AVG(score) FROM student) ORDER BY score";
169         ps = conn.prepareStatement(sql);
170         rs = ps.executeQuery();
171         //定义打印流
172         PrintWriter pw = new PrintWriter(new FileWriter("studentInfo.txt"));
173         //遍历结果集
174         while(rs.next()) {
175             String id = rs.getString("id");
176             String name = rs.getString("name");
177             String sex = rs.getString("sex");
178             String score = rs.getString("score");
179             pw.println(id + "-" + name + "-" + sex + "-" + score);
180         }
181         pw.close();
182     }
183     
184     /**
185      * (4)分别统计所有男同学的平均分,所有女同学的平均分及总平均分
186      * @throws SQLException
187      */
188     public static void getAvgScore() throws SQLException {
189         String sql = "SELECT AVG(score),sex FROM student GROUP BY sex";
190         ps = conn.prepareStatement(sql);
191         rs = ps.executeQuery();
192         while(rs.next()) {
193               String sex = rs.getString("sex");
194               String avg = rs.getString("AVG(score)");
195               System.out.println(sex + " " + avg);
196         }
197     }
198     
199     /**
200      * (3)查询成绩大于60的女性,显示姓名,性别,成绩
201      * @throws SQLException
202      */
203     public static void getWomenGrade() throws SQLException {
204         String sql = "SELECT name,sex,score FROM student where sex=? and score>?";
205         ps = conn.prepareStatement(sql);
206         ps.setString(1, "女");
207         ps.setInt(2, 60);
208         rs = ps.executeQuery();
209         while(rs.next()) {
210             String name = rs.getString("name");
211             String sex = rs.getString("sex");
212             String score = rs.getString("score");
213             System.out.println("姓名:" + name + " 性别:" + sex + " 成绩:" + score);
214         }
215     }
216     /**
217      * //(1)查询女性,成绩80以上的学生数量
218      * @throws SQLException
219      */
220     public static void getWomenGradeCount() throws SQLException {
221         String sql = "SELECT count(*) FROM student WHERE sex=? and score>=?";
222         ps = conn.prepareStatement(sql);
223         ps.setString(1, "女");
224         ps.setInt(2, 80);
225         rs = ps.executeQuery();
226         String count = null;
227         while(rs.next()) {
228             count = rs.getString(1);
229         }
230         System.out.println("女性,成绩80以上的学生数量为" + count);
231     }
232     /**
233      * (2)将姓张的男同学的的成绩改为100
234      * @throws SQLException
235      */
236     public static void updateGrade() throws SQLException {
237         String sql = "UPDATE student SET score=? WHERE name like ? and sex=?";
238         ps = conn.prepareStatement(sql);
239         ps.setInt(1, 100);
240         ps.setString(2, "张%");
241         ps.setString(3, "男");
242         ps.executeUpdate();
243     
244     }
245 }
复制代码

 

求知若饥,虚心若愚! --Vanguard

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值