JDBC:
Java DataBase Connectivity 是java程序连接存取数据库的应用程序接口
(是sun公司的程序员定义的一套操作数据库的规则,然后下面的各个公司如:mysql,sql sever ,sqlyog等各自实现接口中的方法就是驱动,每个数据库的驱动都不相同
就像Java中的类一样,Java定义一个接口,下边各个类实现接口中的方法内容都不相同)
在连接数据库前,需要在项目文件中与src同级的文件中创建文件夹lib,并将mysql-connector-java-5.1.45-bin.jar文件导入项目中,eclipse是build path,idea是add as libary
jdbc快速入门:
package com.zs.Demo; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class JDBCDemo { public static void main(String[] args) throws Exception { // 1.加载注册驱动 Class.forName("com.mysql.jdbc.Driver"); // 2.获得连接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/qy97", "root", "123456"); // 查看是否连接数据库成功 System.out.println(conn); // 3.构建sql语句 String sql="update product set sname='华为' where id=2;"; // 4.创建执行sql语句对象Statement Statement stat = conn.createStatement(); // 5.执行sql语句 stat.executeUpdate(sql); // 6.释放资源 stat.close(); conn.close(); } }
我们建一个数据表来方便进行操作,上面代码需要以下面的数据库表为基础
use qy97; create table product( id int primary key auto_increment, sname varchar(50), sprice double ); insert into product values (1,'小米',5000.12), (2,'oppo',4000.54), (3,'vivo',1999.99);
最上面的jdbc快速入门中,写到的executeUpdate()方法,该方法只能执行insert,update ,delete语句,执行查询语句是,需要用到executeQuery()方法
示例:
package com.zs.Demo; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class JDBCDemo2 { // 查询数据库操作 public static void main(String[] args) throws Exception { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/qy97", "root", "123456"); String sql="select * from product "; Statement stat = conn.createStatement(); // 调用executeQuery()该方法得到的结果是一个结果集 ResultSet rs = stat.executeQuery(sql); // 使用循环语句输出结果 while(rs.next()){ System.out.print("id:"+rs.getString("id")); System.out.print("sname:"+rs.getString("sname")); System.out.print("sprice:"+rs.getString("sprice")); } stat.close(); conn.close(); } }
在之前写Properties类时,我们讲过,当用户更换数据库或者更改数据库账号密码时,那么程序就无法连接数据库了,需要重新找程序员在代码中更改,数据库连接信息,这样是很不方便的,所以我们当时写到,编写一个外部properties文件,将数据库的账号密码信息放在文件中,这样用户就可以通过记事本来更换数据库了,具体实现代码如下:
1.编写外部Properties文件 sql.properties,存放驱动,数据库连接地址,数据库名,密码
driver:com.mysql.jdbc.Driver url:jdbc:mysql://localhost:3306/qy97 dbuser:root dbpwd:123456
2.建立读取文件内容,建立连接
package com.zs.Demo; import java.io.FileInputStream; import java.sql.*; import java.util.Properties; public class JDBCDemo3 { private static String driver; private static String url; private static String dbuser; private static String dbpwd; private static Connection conn=null; JDBCDemo3(){ try { // 获得数据库连接信息 getSqlInfo(); // 链接数据库 connectSql(); //编写数据库语句 String sql="select * from product"; // 执行数据库语句 executeSql(sql); } catch (Exception e) { e.printStackTrace(); } } private void executeSql(String sql) throws SQLException { Statement stat = conn.createStatement(); ResultSet rs = stat.executeQuery(sql); while(rs.next()){ System.out.println("id:"+rs.getString("id")+ ",name:" + rs.getString("sname")+ ",price:" +rs.getString("sprice")); } stat.close(); conn.close(); } private void connectSql() throws Exception { if(conn==null){ Class.forName(driver); conn=DriverManager.getConnection(url,dbuser,dbpwd); System.out.println(conn); } } private void getSqlInfo() throws Exception { FileInputStream f=new FileInputStream("E:\workspace\ZsProjects\day37\src\sql.properties"); Properties p=new Properties(); p.load(f); driver = p.getProperty("driver"); url = p.getProperty("url"); dbuser = p.getProperty("dbuser"); dbpwd = p.getProperty("dbpwd"); f.close(); } public static void main(String[] args) { new JDBCDemo3(); } }
这样就可以读取文件建立连接,用户更改数据库时,直接记事本打开文件就可以更改数据库