JDBC是Java Database Connectivity(Java数据库连接)的简称,用Java语言规范客户端程序如何访问数据库的应用接口,提供了通过Java传输SQL操作给数据库的方法。
JDBC架构
JDBC架构分为双层架构和三层架构。
JDBC双层架构
双层架构就是通过Java API(JDBC)直接访问数据库。Java API或者应用直接访问数据源。
JDBC三层架构
三层结构就是客户端(GUI),服务端(JDBC),数据库。
JDBC的基本步骤
-
建立数据库的驱动,安装驱动程序。
Class.forName(driver); 其中driver为驱动,就是使用Jdbc的要使用的驱动,一般为:driver = "com.mysql.cj.jdbc.Driver";(如果是使用mysql-connector-java-5.1之前的版 本,则去掉cj即可,这个是使用8.0版本时必须要加入的。)
-
建立与数据库的连接,通知数据库要进行连接。
Connection connection = DriverManager.getConnection(url, username, password); 其中url为要连接的数据库的相关信息,一般为:url="jdbc:mysql://localhost:3306/test_jdbc?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT"; username = '你要连接数据库索要使用的用户名' password = '你使用的用户的密码'
-
创建操作数据库的对象
Statement stmt = connection.createStatement(); 或者 PreparedStatement pstmt = connection.prepareStatement(sql);
-
使用数据库对象执行数据库的操作
-
使用修改数据库信息的操作(无返回数据)
String sql="update user set LoginName='博哥' where Id=1"; int row = stmt.executeUpdate(sql); //row:代表数据库受到影响的函数,一般来说,增删改都会提示数据库受影响的行,一般可以用来判断是否操作成功。
-
使用查询已提取数据库信息的操作(含返回数据)
String sql="select * from user"; ResultSet rs = stmt.executeQuery(sql); List list=new ArrayList(); 查询的方法时executeQuery(),它接受一个ResultSet类型的结果,当读取数据库数据的时候,它有一个游标指针,指向数据库第一条记录,如果循环读取,每读一行指针就会下移一行数据,直到所有数据读取完毕。 其中ResultSet类型的参数读取数据有两种方法。1.rs.get(索引)2.rs.get(数据库字段名)第一种就是所搜寻当前记录的第几条属性,1代表的就是搜到结果的第一个属性,以此类推。第二种就是直接输入字段名直接获得与之匹配的属性,数据库字段名不区分大小写。
-
-
关闭数据库的连接
connection.close();//关闭之前创建的数据库对象
其中的sql语句分为两种形式,不同类型的sql语句也会使用不同的数据库对象。
-
连接型
连接型的sql使用Statement类型的数据库对象,直接将完整的sql语句传入Statement的executeUpdate()/executeQuery()方法中来完成操作。 Statement stmt = conniction.createStatement(); int row = stmt.executeUpdate(sql); 或者 Statement stmt = conniction.createStatement(); ResultSet rs = stmt.executeQuery(sql);
-
索引型
索引型的sql使用PreparedStatement类型的数据库对象,将带有索引的sql语句传入connection的方法prepareStatement(sql)方法来完成操作。 String sql = "seletc * from user where LoginName=? and LoginPwd=?"//其中的?代表的是之后要传入的值。 PreparedStatement pstmt = connection.prepareStatement(sql); //将参数按照之前sql之中定义的顺序一一填入其中,第一个值为索引,就是?出现在sql语句中的第几个位置。第二个值为要传入该位置的确定的值。 pstmt.setString(1,name); pstmt.setString(2,pwd);
其中索引型要比连接型更加的安全,更加快捷。
可以直接通过上面图片显示的方法直接登录,即使数据库中没有用户的登录名为"‘or 1=1 or’"。