JDBC介绍
jdbc主要用于java代码连接数据库,java代码就可以向数据库发送sql语句,操作数据。
使用Java代码连接数据库的步骤
环境搭建
导入数据库驱动包驱动包(mysql-connector-java-5.1.37-bin.jar)
创建对象
使用反射技术获取数据库驱动
Class.forName("com.mysql.jdbc.Driver");
获取连接
使用DriverManger的静态方法getConnectionh获取连接
Connection connection = DriverManager.getConnection(url, username,password);
url为数据库的地址 例:jdbc:mysql://127.0.0.1/数据库名
username与password分别为数据库的用户名和密码
获取sql语句执行对象
通过Connection获取sql语句执行对象可以获得
方式1:获取Statement(不推荐)
Statement statement = connection.createStatement();
方式2:获得Statement的子类对象PreparedStatement (推荐使用,安全性高)
PreparedStatement p = connection.prepareStatement(sql);
参数为sql语句:注意:不确定的参数使用“?"占位符而不是使用变量
例:select * from user where id =?
执行sql语句
方式1:使用获得到的Statement执行sql语句
boolean b = statement.execute(sql);
参数为要执行的sql语句,该方法一般用来执行DDL语句
int i = statement.executeUpdate(sql);
参数为要执行的sql语句,返回值为sql语言影响的行数,该方法一般用来执行DML语句
ResultSet set = statement.executeQuery(sql);
参数为失去了语句,返回查询到的结果集,一般用来执行DQL语句
方式2:使用获得到的PreparedStatement执行sql语句
下面的这些方法和上面的都一样但是不需要sql语句作为参数,因为获得PreparedStatement时已经指定了sql语句
boolean b = statement.execute();
int i = statement.executeUpdate();
ResultSet set = statement.executeQuery();
为sql语句里面的“?”号占位符赋值方法
setObject(int i, Object o);
第一个参数为你要为哪一个“?”赋值,
第二个参数为你要问那个参数赋一个什么样的值
处理结果集(如果不是查询就不需要这一步)
ResultSet获取结果的方法
boolean b = resultSet.next();
该方法返回一个boolean类型的值,判断是否有下一个元素,有就返回true没有就返回false
Object o = resultSet.getObject(String s);
参数为列的名字获取指定类的值,返回一个Object,如果想直接获得对应类型的参数,就可以调用
getInt(String), getDouble(String s)......等等很多类型
上面方法还有重载的方法参数为一个int值 Object o = resultSet.getObject(int i); 获取的是第 i 列的数据
关闭资源
你获取了下面哪一个对象就调用他们哪一个对象的close方法
connection.close();
statement.close();
preparedStatement.close();
resultSet.close();
使用java代码向数据库添加数据
String username = "zzzzz"; String password = "aaaaa"; //使用反射技术创建对象 Class.forName("com.mysql.jdbc.Driver"); //数据库的url String url = "jdbc:mysql://127.0.0.1/day23"; //获取连接 Connection connection = DriverManager.getConnection(url, "root","root"); //获取sql语句执行对象 Statement statement = connection.createStatement(); //书写sql语句 向user表里面添加数据 String sql = "insert into user(username,password) values('"+username+"','"+password+"')"; //执行sql语句 int i = statement.executeUpdate(sql); System.out.println(i); //关闭资源 connection.close(); statement.close();
使用java代码查询数据库数据
//数据库的 地址 String url = "jdbc:mysql://127.0.0.1/day23"; //数据库的密码和用户名 String user = "root"; String password = "root"; //使用反射创建驱动 Class.forName("com.mysql.jdbc.Driver"); //获取连接 Connection connection = DriverManager.getConnection(url, user, password); //书写sql语句 ?号为占位符 String sql = "select * from staff where salary = ? "; //获取sql语句执行对象 PreparedStatement p = connection.prepareStatement(sql); //为占位符赋值 注意:不是从0开始而是从1开始 p.setObject(1, 45); //执行查询 获取结果集对象 ResultSet set = p.executeQuery(); //循环获取结果集 //判断是否有下一个结果,并且把游标往下移动一位 while(set.next()){ //获取指定列的值 int id = set.getInt("id"); String name = set.getString("name"); String sex = set.getString("sex"); Date date = set.getDate("edate"); int salary = set.getInt("salary"); System.out.println(id+" "+name+" "+sex+" "+date+" "+salary); } //关闭资源 connection.close(); p.close(); set.close();