作者:Alvin
功能:数据库连接与实现增删改查
时间:2019年3月4日08点33分
参考文章:https://www.2cto.com/database/201805/743741.html
一、总结
数据库加载分为以下几个步骤
第一步、加载驱动
MySQL的加载方式 Class.forName("com.mysql.jdbc.Driver"); Oracle的加载方式 Class.forName("oracle.jdbc.driver.OracleDriver"); SQLServer Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
第二步、创建连接
1、分开写形式如下
String url = "jdbc:mysql://127.0.0.1:3306/要连接的数据库表名"; String username = "root"; String password = "root"; Connection con = DriverManager.getConnection(url,username,password);
2、单独写成形式如下
Connection con=DriverManage.getConnection(url,username,password);
如
Connection con=DriverManage.getConnection("jdbc:mysql://127.0.0.1:3306/要连接的数据库表名",username,password);
3、设置连接时编码方式useUnicode=true&characterEncoding=UTF-8,如
String URL ="jdbc:mysql://127.0.0.1:3306/studentsuser=root&password=123&useUnicode=true&characterEncoding=UTF-8"; con = DriverManager.getConnection(URL);
4、确认是否连接成功
//如果连接成功打印con不为空 System.out.println(con);
第三步、创建语句执行对象
Statement stmt=con.createStatement();
第四步、得到数据库执行操作结果
一般情况下有如下几个执行类型
1、增加数据
int modifyLinesAdd = stmt.executeUpdate(sql1);//将返回被增加的行数
2、删除数据
int modifyLinesDelete=stmt.executUpdate("delete from 表名 where 条件");//将返回发生修改的条数
3、修改数据
int modifyLinesSwitch=stmt.executeUpdate();//将返回发生修改的行数
4、查询操作
ResultSet rs=stmt.executQuery("select from 表名");//执行查询,返回的时Set集合
所以再只有再进行数据库查询的时候使用executeQuery()方法,再增、删、改的时候执行的都是executeUpdate()方法
还可以向数据库中添加文件下面以图片为例(因为时添加操作所以仍然使用的时executeUpdate()方法)
添加图片数据源码
File image = new File("C:/Users/lyp/Pictures/桌面背景/1.jpg"); //添加图片的路径 ps = con.prepareStatement("INSERT INTO `students`.`students_1` (`id`,`name`, `sex`, `age`,`icon`)" + " VALUES (,,,,);"); ps.setInt(1, numbefore+1); ps.setString(2, "兰陵王"); ps.setString(3,"男"); ps.setInt(4,500); fis = new FileInputStream(image); ps.setBinaryStream(5, (InputStream) fis, (int) (image.length())); //检查是否添加成功 int s = ps.executeUpdate(); if (s > 0) { System.out.println("Uploaded successfully !"); } else { System.out.println("unsucessfull to upload image."); }
查询操作案例
ResultSet rs.stmt.executeQuery("select from student"); //处理执行后的结果rs rs.next()用于判断下一项是否存在,如果存在,将返回true while(rs.next()){ int id=rs.getInt("id");//得到id这一列的数据 String name=rs.getString("names");//得到姓名 String gender=rs.getString("gender");//得到性别 int age=rs.getAge("age");//得到年龄 }
第五步、执行完毕数据库的操作必须依次关闭打开的所有连接
//关闭rs rs.close(); //关闭stmt stmt.close(); //关闭con con.close();
二、完整案例源码
//数据库类源码如下 public class DataBase { public static void main(String[] args) { int numbefore = 0; Connection con = null;//链接接口 Statement stmt = null;//发送SQL语句接口 ResultSet rs = null;//返回结果集接口 PreparedStatement ps = null; FileInputStream fis; try { //加载驱动 Class.forName("com.mysql.jdbc.Driver"); //连接方法一 /*String url = "jdbc:mysql://127.0.0.1:3306/students";//127.0.0.1可以改成localhost,表示本地主机。 String username = "root"; String password = "root"; con = DriverManager.getConnection(url,username,password);*/ //连接方法二,useUnicode=true&characterEncoding=UTF-8是设置编码方式 String URL ="jdbc:mysql://127.0.0.1:3306/studentsuser=root&password=123&useUnicode=true&characterEncoding=UTF-8"; con = DriverManager.getConnection(URL); //如果连接成功打印con不为空 System.out.println(con); stmt = con.createStatement(); //con.close(); //查询数据库中表的值,并且打印出来 rs = stmt.executeQuery("select * from students_1"); while(rs.next()) { //next()方法控制行数,一行一行读出返回结果集,直到null int id = rs.getInt("id");//获取id这一列的数据 String name = rs.getString(2);//获取第二列数据 String sex = rs.getString("sex"); int age = rs.getInt("age"); System.out.println("编号="+id+",姓名="+name+",性别="+sex+",年龄="+age); //计算表中数据的行数 numbefore = numbefore + 1; } //打印出操作数据前的行数 System.out.println("操作前数据为"+numbefore+"行"); //添加图片数据 File image = new File("C:/Users/lyp/Pictures/桌面背景/1.jpg"); //添加图片的路径 ps = con.prepareStatement("INSERT INTO `students`.`students_1` (`id`,`name`, `sex`, `age`,`icon`)" + " VALUES (,,,,);"); ps.setInt(1, numbefore+1); ps.setString(2, "兰陵王"); ps.setString(3,"男"); ps.setInt(4,500); fis = new FileInputStream(image); ps.setBinaryStream(5, (InputStream) fis, (int) (image.length())); //检查是否添加成功 int s = ps.executeUpdate(); if (s > 0) { System.out.println("Uploaded successfully !"); } else { System.out.println("unsucessfull to upload image."); } //添加一行数据 //使用SQL语句:INSERT INTO `students`.`students_1` (`id`, `name`, `sex`, `age`) VALUES ('1','小七', '女', '10'); 添加数据 /*String sql1 = "INSERT INTO `students`.`students_1` (`id`,`name`, `sex`, `age`) VALUES ('1','小七', '女', '10');"; int result1 = stmt.executeUpdate(sql1); System.out.println("有"+result1+"行记录被修改");*/ //动态添加一行数据 /*ps = con.prepareStatement("INSERT INTO `students`.`students_1` (`id`,`name`, `sex`, `age`) VALUES (,'小七', '女', '10');"); ps.setInt(1, numbefore+1); int result_x = ps.executeUpdate(); System.out.println("有"+result_x+"行记录被修改");*/ //修改一个数据 //使用SQL语句:UPDATE `students`.`students_1` SET `name` = '康纳' WHERE `age` = 12 AND `sex` = '男':修改age=12和sex=男的数据的name为康纳 String sql2 = "UPDATE `students`.`students_1` SET `name` = '康纳' WHERE `id`= '4' AND `age` = '12' AND `sex` = '男'; "; int result2 = stmt.executeUpdate(sql2); System.out.println("有"+result2+"行记录被修改"); //删除一行数据 //使用SQL语句:DELETE FROM `students`.`students_1` WHERE `id` = '5' ; 删除id=5的一行 /*String sql3 = "DELETE FROM `students`.`students_1` WHERE `id` = '8' ; "; int result3 = stmt.executeUpdate(sql3); System.out.println("有"+result3+"行记录被修改");*/ } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } catch (FileNotFoundException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); }finally {//依次关闭数据库接口 if(rs!=null) { try { rs.close(); } catch (SQLException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } if(stmt!=null) { try { stmt.close(); } catch (SQLException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } if(con!=null) { try { con.close(); } catch (SQLException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } } } }