JDBC数据库的连接和数据库的操作

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 }

 

转载于:https://www.cnblogs.com/guodong-wang/p/7240457.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值